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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值