노드가 DOM 트리에 있는지 확인
                                            
 4315 단어  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;i
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
        }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JavaScript DOM 조작③ 「태그명을 키로 요소를 취득」이 기사에서는 JavaScript DOM 작업 "태그 이름을 키로 요소 가져오기" 에 대해 설명한다. 역할 HTML 내의 지정된 태그명을 가지는 요소를 취득하는 메소드 구문 구문은 다음과 같다. index.js 보충...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.