为firefox实现innerText属性

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

知识点:

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( 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 >

你可能感兴趣的:(innerTEXT)