0

다른 특정 요소의 하위 항목이 아닌 하나 이상의 요소를 선택하려고합니다. 예에서 다른 특정 요소 외부의 요소 선택

<html> 
<body> 
    <div> 
     <p> 
      <b> 
       <i> don't select me </i> 
      </b> 
     </p> 
    </div> 
    <div> 
     <i>don't select me either </i> 
    </div> 
    <i> select me </i> 
    <b> 
     <i> select me too </i> 
    </b> 
</body> 
</html> 

내가 DIV 요소 내부 하지을 모두 'I'요소를 선택하려면 위의

. 다른 방법은 ('div i')를 사용하면 쉽지만 not :()를 사용하면 쉽습니다.

div 요소 외부의 모든 i 요소를 어떻게 선택합니까? 는 종종 그것은 같은 것 jQuery를 사용, 제안 : 내가 jQuery를 사용할 수 없습니다

nondiv_i = all_i.not(all_div.find("i")) 

,하지만 jqLite을 사용할 수 있습니다 - 기능 - jqLite는하지()를 가지고 있지 않습니다. jqLite 솔루션도 환영합니다! 반복 및 비교를 반복하지 않고도이 작업을 수행 할 수 있습니까?

편집 : 분명히하기 위해, 나는 직접적인 div-parents가 아닌 i-element를위한 div-ancestor를 갖고 싶지 않습니다.

대등 한 XPath는 다음과 같을 것이다 :

//i[not(ancestor::div)] 
+1

'document.querySelectorAll ('몸 :하지 (DIV) 내가')

var r = document.getElementsByClassName("itag"); console.log("length" + r.length); 

당신은 다음 인덱스를 얻을 수있는' – putvande

+0

@ OP가 희망적으로 그것을 수락 할 수 있도록 귀하의 의견을 답변으로 추가하십시오. – JeffC

+0

이 답변은 작동하지 않았습니다. 그것은 을 반환합니다 나를 선택하지 마십시오도 나를 선택하십시오. 그것에 대해 생각할 때 (몸을 선택하고 div가 아닌 모든 요소를 ​​선택한 다음 i- 요소를 가져 오는 것) 좋은 생각이지만 작동하지 않습니다 (내 문제가 처음부터 발생하는 곳입니다). 나중에이 프로젝트를 제쳐두고이 질문을 포기하지 않았습니다. :) 아직도 대답을 찾고. – Peter1807

답변

0
function isDescendant(parent, child) { 
    var all = parent.getElementsByTagName(child.tagName); 
    for (var i = -1, l = all.length; ++i < l;) { 
     if(all[i]==child){ 
      return true; 
     } 
    } 
    return false; 
} 

을 당신의 특정한 경우에;

is = document.getElementsByTagName("i"); 
divs = document.getElementsByTagName("div"); 
nondivs = []; 
var contains; 
for(i=0;i<is.length;i++){ 
    contains = false; 
    for(j=0;j<divs.length;j++){ 
     if(isDescendant(divs[j],is[i])){ 
      contains = true; 
      j = divs.length; 
     } 

    } 
    if(!contains){ 
     nondivs.push(is[i]); 
    } 

} 
+0

은 단순히 당신은 내게 너무 damon

-2

모든 <i> 태그 (예 : "itag")에 클래스를 추가하십시오. 여기에서, 당신은 getElementsByClassName를 호출하여 가져올 수 있습니다 :

console.log(r[0]); 
console.log(r[1].innerHTML); // get text of i tag 
+1

일반적으로 사람들은 사이트를 편집하고 태그를 추가 할 수 없으므로 실행 가능한 답변이 아닙니다. – JeffC