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

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

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 奇偶判断
    Java实现 蓝桥杯VIP 算法训练 传球游戏
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 Hanoi问题
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Java实现 蓝桥杯VIP 算法训练 蜜蜂飞舞
    Qt: 访问容器(三种方法,加上for循环就四种了)good
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1768966.html
Copyright © 2011-2022 走看看