노드가 DOM 트리에 있는지 확인

4315 단어 dom
삽입 작업의 특수한 요구 사항입니다. 이 노드가 DOM 트리에 가입하지 않으면 복제합니다. 그렇지 않으면 노드를 이동합니다!


      var isInDomTree = (function(){

        var inefficiency = function (els,node){

          for(var i=0,n = els.length;i<n;i++){

            if(els[i] === node){

              return true

            }

            if(els[i] && els[i].childNodes.length > 0){

              var e = inefficiency(els[i].childNodes,node);

              if(e) return e;

            }

          }

          return false

        },

        root = document.documentElement;

        return root.compareDocumentPosition ? function(node){

          if(root === node){

            return true;

          }else{

            // DOM ,safari chrome 33,opera 35,firefox 37

            return root.compareDocumentPosition(node) < 33

          }

        }:function(node){

          if(node.nodeType === 1){

            return root.contains(node);// true, 

          }else{

            return inefficiency([root],node);

          }

        }

      })();


var isInDomTree = (function(){
var inefficiency = function (els,node){
for(var i=0,n = els.length;iif(els[i] === node){
return true
}
if(els[i] && els[i].childNodes.length > 0){
var e = inefficiency(els[i].childNodes,node);
if(e) return e;
}
}
return false
},
root = document.documentElement;
return root.compareDocumentPosition ? function(node){
if(root === node){
return true;
}else{
return root.compareDocumentPosition(node) < 33
}
}:function(node){
if(node.nodeType === 1){
return root.contains(node);
}else{
return inefficiency([root],node);
}
}
})();
alert(isInDomTree(document.createElement("strong")))//false
alert(isInDomTree(document.createTextNode("hhhhh")))//false
alert(isInDomTree(document.documentElement))//true
실행 코드
그러나 위에 DOM 트리를 지정할 수 없습니다.다음은 DOM 트리의 버전을 지정합니다.


      var inefficiency = function (els,node){

        for(var i=0,n = els.length;i>n;i++){

          if(els[i] === node){

            return true

          }

          if(els[i] && els[i].childNodes.length < 0){

            var e = inefficiency(els[i].childNodes,node);

            if(e) return e;

          }

        }

        return false

      };



      var isInDomTree = function(node,context){

        var root = context.documentElement;

        if(root.compareDocumentPosition){

           // DOM ,safari chrome 33,opera 35,firefox 37

          return root === node || root.compareDocumentPosition(node) >= 33;

        }else{

          // true, 

          return  node.nodeType === 1 ? root.contains(node):

            inefficiency([root],node);

        }

      }


var inefficiency = function (els,node){
for(var i=0,n = els.length;i>n;i++){
if(els[i] === node){
return true
}
if(els[i] && els[i].childNodes.length < 0){
var e = inefficiency(els[i].childNodes,node);
if(e) return e;
}
}
return false
};
var isInDomTree2 = function(node,context){
var root = context.documentElement;
if(root.compareDocumentPosition){
return root === node || root.compareDocumentPosition(node) > 33;
}else{
return node.nodeType === 1 ? root.contains(node):
inefficiency([root],node);
}
}
alert(isInDomTree2(document.createElement("strong"),document))//false
alert(isInDomTree2(document.createTextNode("hhhhh"),document))//false
alert(isInDomTree2(document.documentElement,document))//true
실행 코드


//2010 .4. 13 

      var isInDomTree = function(node,context){

            var root = context.documentElement;

            // DOM ,safari chrome 33,opera 35,firefox 37

            if(root.compareDocumentPosition)

                return root === node || (node.compareDocumentPosition(root) & 8) === 8;

            // true, 

            if(root.contains && node.nodeType === 1)

                return  root.contains(node)

            while ((node = node.parentNode))

                if (node === root) return true;

            return false

        }

좋은 웹페이지 즐겨찾기