螺螺的blog
父母一天天老去了,我要努力!

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

知识点:

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>
posted on 2008-11-24 17:54  luoluo  阅读(7231)  评论(2编辑  收藏  举报