现在的位置: 首页 > 综合 > 正文

为firefox实现innerText属性

2011年12月16日 ⁄ 综合 ⁄ 共 1713字 ⁄ 字号 评论关闭

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

知识点:

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

1、为firefox dom模型扩展属性 

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

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

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

 

<html>
<body>
<div id="d1"><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(thisnull);
        });

        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>

抱歉!评论已关闭.