很多代码写了又忘忘了又写,很浪费,所以决定养成做笔记的习惯。
知识点:
0、为什么要innertext?因为安全问题
1、为firefox dom模型扩展属性
2、currentstyle属性可以取得实际的style状态
3、ie实现innertext时考虑了display方式,如果是block则加换行
4、为什么不用textcontent?因为textcontent没有考虑元素的display方式,所以不完全与ie兼容
<script type="text/javascript"> <br><!-- <br>// <br>// patch of innerText for firefox <br>// <br>(function (bool) { <br>function setInnerText(o, s) { <br>while (o.childNodes.length != 0) { <br>o.removeChild(o.childNodes[0]); <br>} <br>o.appendChild(document.createTextNode(s)); <br>} <br>function getInnerText(o) { <br>var sRet = ""; <br>for (var i = 0; i < o.childNodes.length; i ++) { <br>if (o.childNodes[i].childNodes.length != 0) { <br>sRet += getInnerText(o.childNodes[i]); <br>} <br>if (o.childNodes[i].nodeValue) { <br>if (o.currentStyle.display == "block") { <br>sRet += o.childNodes[i].nodeValue + "\n"; <br>} else { <br>sRet += o.childNodes[i].nodeValue; <br>} <br>} <br>} <br>return sRet; <br>} <br>if (bool) { <br>HTMLElement.prototype.__defineGetter__("currentStyle", function () { <br>return this.ownerDocument.defaultView.getComputedStyle(this, null); <br>}); <br>HTMLElement.prototype.__defineGetter__("innerText", function () { <br>return getInnerText(this); <br>}) <br>HTMLElement.prototype.__defineSetter__("innerText", function(s) { <br>setInnerText(this, s); <br>}) <br>} <br>})(/Firefox/.test(window.navigator.userAgent)); <br>//--> <br></script>
<script type="text/javascript"> <br><!-- <br>var d1 = document.getElementById("d1"); <br>alert(d1.innerText); <br>d1.innerText = "xxx"; <br>//--> <br></script>
今天在制作firefox下支持复制的js代码的时候,用到了innerText,测试发现原来firefox支持innerHTML但不支持innerText,所以上网找了一下,发现了一篇非常不错的代码。另从回复中,我们得到了如下兼容代码。修正了原来ie下出现错误提示的问题。具体的看下么的文章。
把这段加在你所JS文件中就可以在MOZILLA/FIREFOX下使用innerText
HTMLElement.prototype.__defineGetter__
(
"innerText",
function ()
{
var anyString = "";
var childS = this.childNodes;
for(var i=0; i
if(childS[i].nodeType==1)
anyString += childS[i].tagName=="BR" ? '\n' : childS[i].innerText;
else if(childS[i].nodeType==3)
anyString += childS[i].nodeValue;
}
return anyString;
}
);
但这段代码在IE中它会提示HTMLElement未定义,下面就是具体的解决方法。
function isIE(){ //ie? 判断是不是ie
if (window.navigator.userAgent.indexOf("MSIE")>=1)
return true;
else
return false;
}
if(!isIE()){
HTMLElement.prototype.__defineGetter__
(
"innerText",
function ()
{
var anyString = "";
var childS = this.childNodes;
for(var i=0; i
if(childS[i].nodeType==1)
anyString += childS[i].tagName=="BR" ? '\n' : childS[i].innerText;
else if(childS[i].nodeType==3)
anyString += childS[i].nodeValue;
}
return anyString;
}
);
}











