Javascript教程:innerText属性在火狐实现的实例

http://www.itjxue.com  2015-08-06 23:01  来源:未知  点击次数: 

很多代码写了又忘忘了又写,很浪费,所以决定养成做笔记的习惯。

知识点:

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>

(责任编辑:IT教学网)

更多

推荐Javascript/Ajax文章