outerHTML与innerHTML

为了屏蔽IE与标准浏览器之间鸿沟,特别搞了这个,而且连XML也能用了。


          if(!String.prototype.trim){

               String.prototype.trim = function(str){

                   return this.replace(/^[\s\xa0]+|[\s\xa0]+$/g, '');

               }

         }

               

         var  metaObject = {

                    '\b': '\\b',

                    '\t': '\\t',

                    '\n': '\\n',

                    '\f': '\\f',

                    '\r': '\\r',

                    '\\': '\\\\'

         }

        if(!String.prototype.quote ){

           String.prototype.quote = function () {

                 str = this.replace(/[\x00-\x1f\\]/g, function (chr) {

                            var special = metaObject[chr];

                            return special ? special : '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4)

                 });

                  return '"' + str.replace(/"/g, '\\"') + '"';

             }

        }



        if(document.documentElement.__defineGetter__){

          HTMLElement.prototype.__defineGetter__("currentStyle", function () {

            return this.ownerDocument.defaultView.getComputedStyle(this, null);

          });

        }

        var rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i;

        var outerHTML = function(el,recursion){

          switch(el.nodeType+""){

            case "1":

              var array = [];

              var nodeName = el.nodeName;

              if(recursion && el.currentStyle.display == "block"){

                array.push("\n")

              }

              array.push("<"+nodeName);

              for(var i=0,t;t=el.attributes[i++];){

                array.push(" "+t.name+"="+(t.value||t.specified+"").quote())

              }

              if(rselfClosing.test(el.nodeName)){

                array.push("\/>")

              }else{

                array.push(">");

                for(var i=0,c;c=el.childNodes[i++];){

                  array.push(outerHTML(c,true))

                }

                array.push("<\/"+el.nodeName+">")

              }

              return array.join("");

            case "3":

              return el.nodeValue.trim();

            case "8":

              return "innerHTML" in el? el.innerHTML : "<!--"+el.nodeValue+"-->"

          }

        }

        var innerHTML = function(el){

          var array = [];

          for(var i=0,c;c=el.childNodes[i++];){

            array.push(outerHTML(c,true))

          }

          return array.join("");

        }

outerHTML = function(el,recursion){ dom.require("css"); switch(el.nodeType+""){ case "1": var array = []; var nodeName = el.nodeName; if(recursion && dom.getStyle(el,"display") == "block"){ array.push("\n") } array.push("<"+nodeName); if(dom.ie67 && el.outerHTML){ var a = el.outerHTML.match(/<(\w+)([^>]*)>/); if(a && a[2]){ array.push(" "+ a[2].trim().split(/\s+/).map(function(el){ var value = el.split("=")[1]; if(value.charAt(0)!=="\""){ el = el.replace(value,value.quote()); } return el; }).join(" ")); } }else{ for(var i=0,t;t=el.attributes[i++];){ array.push(" "+t.name+"="+(t.value||t.specified+"").quote()) } } if(rselfClosing.test(el.nodeName)){ array.push("\/>") }else{ array.push(">"); for(var i=0,c;c=el.childNodes[i++];){ array.push(outerHTML(c,true)) } array.push("<\/"+el.nodeName+">") } return array.join(""); case "3": return el.nodeValue.trim(); case "8": return "innerHTML" in el? el.innerHTML : " " } },

你可能感兴趣的:(innerHTML)