innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别

2019-12-26,,

innerText 属性在 IE 浏览器中可以得到当前元素过滤掉 HTML Tags 之后的文本内容,在某些时候还是比较有用。但类似的非标准属性/方法在其他浏览器中并不一定都得到支持。

类似的像 insertAdjacentElement , insertAdjacentElement , insertAdjacentHTML , insertAdjacentText 等。如果需要使用这些非标准的方法,或者已有的代码大量使用了这些方法的话,就必须为其他浏览器提供对应的 prototype 定义。比如:

var isMinNS5 = (navigator.appName.indexOf("Netscape") >= 0 &&

               parseFloat(navigator.appVersion) >= 5) ? 1 : 0;

if (isMinNS5){

 HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode){

   switch (where){

   case ’beforeBegin’:

     this.parentNode.insertBefore(parsedNode,this)

     break;

   case ’afterBegin’:

     this.insertBefore(parsedNode,this.firstChild);

     break;

   case ’beforeEnd’:

     this.appendChild(parsedNode);

     break;

   case ’afterEnd’:

     if(this.nextSibling){

       this.parentNode.insertBefore(parsedNode,this.nextSibling);

     }

     else{

       this.parentNode.appendChild(parsedNode)

     }

   break;

   }

 }

 HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr){

   var r = this.ownerDocument.createRange();

   r.setStartBefore(this);

   var parsedHTML = r.createContextualFragment(htmlStr);

   this.appendChild(parsedHTML)

 }

 HTMLElement.prototype.insertAdjacentText = function(where,txtStr){

   var parsedText = document.createTextNode(txtStr)

   this.insertAdjacentElement(where,parsedText)

 }

 HTMLElement.prototype.__defineGetter__

 (

   "innerText",

   function(){

     var anyString = "";

     var childS = this.childNodes;

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

       if(childS[i].nodeType==1)

         anyString += childS[i].tagName=="BR" ? ’\n’ : childS[i].innerText;

       else if(childS[i].nodeType==3)

         anyString += childS[i].nodeValue;

     }

     return anyString;

   }

 );

}

《innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别.doc》

下载本文的Word格式文档,以方便收藏与打印。