inner/outerHTML的兼容解决办法

来源:互联网 发布:淘宝消保在哪里交 编辑:程序博客网 时间:2024/05/17 16:02

HTMLElement.prototype.innerHTML setter = function (str) {
 var r = this.ownerDocument.createRange();
 r.selectNodeContents(this);
 r.deleteContents();
 var df = r.createContextualFragment(str);
 this.appendChild(df);
 
 return str;
}
 
HTMLElement.prototype.outerHTML setter = function (str) {
 var r = this.ownerDocument.createRange();
 r.setStartBefore(this);
 var df = r.createContextualFragment(str);
 this.parentNode.replaceChild(df, this);
 return str;
}


HTMLElement.prototype.innerHTML getter = function () {
 return getInnerHTML(this);
}

function getInnerHTML(node) {
 var str = "";
 for (var i=0; i<node.childNodes.length; i++)
  str += getOuterHTML(node.childNodes.item(i));
 return str;
}

HTMLElement.prototype.outerHTML getter = function () {
 return getOuterHTML(this)
}

function getOuterHTML(node) {
 var str = "";
 
 switch (node.nodeType) {
  case 1: // ELEMENT_NODE
   str += "<" + node.nodeName;
   for (var i=0; i<node.attributes.length; i++) {
    if (node.attributes.item(i).nodeValue != null) {
     str += " "
     str += node.attributes.item(i).nodeName;
     str += "=/"";
     str += node.attributes.item(i).nodeValue;
     str += "/"";
    }
   }

   if (node.childNodes.length == 0 && leafElems[node.nodeName])
    str += ">";
   else {
    str += ">";
    str += getInnerHTML(node);
    str += "<" + node.nodeName + ">"
   }
   break;
   
  case 3: //TEXT_NODE
   str += node.nodeValue;
   break;
  
  case 4: // CDATA_SECTION_NODE
   str += "<![CDATA[" + node.nodeValue + "]]>";
   break;
    
  case 5: // ENTITY_REFERENCE_NODE
   str += "&" + node.nodeName + ";"
   break;

  case 8: // COMMENT_NODE
   str += "<!--" + node.nodeValue + "-->"
   break;
 }

 return str;
}

原创粉丝点击