dom Framework实现XML的innerHTML、outerHTML操作

前端的XML真是不毛之地,要什么没什么。

下面是我框架对此处理的相关代码:


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

       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);

                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 "<!--"+el.nodeValue+"-->"

        }

    },



     outerHTML = function(el,xml){//2010.7.2更新

        switch(el.nodeType+""){

            case "1":

                return el.xml;

            case "3":

                return el.nodeValue.trim();

            case "8":

                return "
 
   "

        }

     },

      innerHTML = function(el){

        var array = [];

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

          array.push(outerHTML(c))

        }

        return array.join("");

      }

      if(document.defaultView){

        outerHTML = function(node){

          return new XMLSerializer().serializeToString(node).replace(dom.root(node).namespaceURI,"")

        }

        innerHTML = function(node){

          var s = outerHTML(node),

          re = new RegExp('<('+node.nodeName+')(?=\\s|>)[^>]*?>([\\s\\S]*?)<\\/\\1>', 'g');

          return re.exec(s)[2]

        }

      }

//============框架源码==============

      dom.require("xml");

      var x = dom.xml("<a><b>iiii</b><eee id='gg' kk='j'><dd>一</dd><dd>二</dd><ll>s</ll></eee></a>");

      var eee = x.xml.getElementsByTagName("eee")[0];

      alert(innerHTML(eee))


玩房地产的怎么能斗得过玩科技的呢???

你可能感兴趣的:(innerHTML)