zoukankan      html  css  js  c++  java
  • 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))
    

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

  • 相关阅读:
    vue
    手写Promise
    Promise应用
    Promise
    JS_URL模块
    模板字符串应用
    JS-OOP
    jQuery——过时,但是经典,关注核心点即可。
    MySql补充
    offset系列
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1768966.html
Copyright © 2011-2022 走看看