0

他の特定の要素の子孫でない要素を1つ以上選択しようとしています。私はdiv要素内ないすべての「I」の要素を、選択したい上記の例で他の特定の要素の外にある要素を選択する

<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')を使うと簡単になりますが、これをnot()で使用することはできません。

div要素の外側にあるi要素をすべて選択するにはどうすればよいですか?機能 - jqLit​​eはない()がありません - 私はjQueryのを使用することはできませんが、jqLit​​eを使用することができ

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

: は、多くの場合、のようなものと思われる、jQueryのを使用することを示唆しています。 jqLit​​eソリューションも大歓迎です! 反復と比較を繰り返さずにこれを行うことは可能ですか?

編集:明確にするために、私は自分のi-elementのdiv-ancestorを望んでいません。同等のXPathは次のようになります

:あなたの特定の場合のための

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

'document.querySelectorAll( 'ボディ::ない(DIV)I')

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

あなたは、インデックスによってそれらを得ることができます' – putvande

+0

@ OPがうまくそれを受け入れるように、あなたのコメントを回答として追加してください。 – JeffC

+0

この回答はうまくいかなかった。それはを返す私を選択しないでください私もtooを選択してください。考えてみると良いです(ボディを選択し、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

単にあなたが私TEG要素、その後getByClass名

don't select me

don't select me either
<私のクラスは= "ITAG">すべてのクラスを与えることができ 私を選ぶ私にあまりにも damon

-2

すべての<i>タグ(「itag」など)にクラスを追加します。そこから、あなたはgetElementsByClassNameを呼び出すことによって、それらを取得することができます:

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

一般的に、人々はサイトを編集してタグを追加するだけで、これは実行可能な回答ではありません。 – JeffC

関連する問題