您的位置:首页 > 其它

为firefox实现innerText属性

2008-11-24 17:54 246 查看
很多代码写了又忘忘了又写,很浪费,所以决定养成做笔记的习惯。

知识点:

0、为什么要innerText?因为安全问题

1、为firefox dom模型扩展属性

2、currentStyle属性可以取得实际的style状态

3、IE实现innerText时考虑了display方式,如果是block则加换行

4、为什么不用textContent?因为textContent没有考虑元素的display方式,所以不完全与IE兼容

<html>

<body>

<div id="d1"><a href="aa">ccc</a>ddd<div>eeee</div>fff</div>

<script type="text/javascript">

<!--

//

// patch of innerText for firefox

//

(function (bool) {

function setInnerText(o, s) {

while (o.childNodes.length != 0) {

o.removeChild(o.childNodes[0]);

}

o.appendChild(document.createTextNode(s));

}

function getInnerText(o) {

var sRet = "";

for (var i = 0; i < o.childNodes.length; i ++) {

if (o.childNodes[i].childNodes.length != 0) {

sRet += getInnerText(o.childNodes[i]);

}

if (o.childNodes[i].nodeValue) {

if (o.currentStyle.display == "block") {

sRet += o.childNodes[i].nodeValue + "\n";

} else {

sRet += o.childNodes[i].nodeValue;

}

}

}

return sRet;

}

if (bool) {

HTMLElement.prototype.__defineGetter__("currentStyle", function () {

return this.ownerDocument.defaultView.getComputedStyle(this, null);

});

HTMLElement.prototype.__defineGetter__("innerText", function () {

return getInnerText(this);

})

HTMLElement.prototype.__defineSetter__("innerText", function(s) {

setInnerText(this, s);

})

}

})(/Firefox/.test(window.navigator.userAgent));

//-->

</script>

<script type="text/javascript">

<!--

var d1 = document.getElementById("d1");

alert(d1.innerText);

d1.innerText = "xxx";

//-->

</script>

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: