innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别

  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;

  }

  );

  }