2011-01-12 10 views
9

10回?その後、私は10番目の親を選択する必要がある場合は、より清潔な方法があります。次に、.parent()を繰り返すことにより、element.parentを作成するクリーナーの方法を示します。parent()。parent()。parent()。parent()

$('#element_id').parent().parent().parent().parent().parent().parent().parent().parent().parent().parent(); 
+8

$(「#のelement_id」)。偉大な偉大な偉大な偉大な偉大な偉大な偉大な偉大な偉大な偉大な偉大な –

+0

@Larry:とてもいいです。 jQueryはAPIのためにそれをどのように見落としましたか? ; o) – user113716

答えて

5

あなたが本当に10日の親を取得する必要があり、そしてあなたがそこに着くために、セレクタを使用できない場合は、スムーズな方法は、おそらくこのようなものになるだろう:

$('#element_id').parents().eq(9); 
15

あなたは後にしているターゲットを表しセレクタがある場合、.closest()または.parents()を使用しています。

$('#element_id').closest('.someClass'); 
$('#element_id').parents('.someClass:first'); 

...しかし、これらの両方が見つかった最初の一致を返します。適切な解決策は、実際のHTMLマークアップに依存します。

(最初の祖先とparents()始まりながら.closest()も、元の要素を評価することに注意してください。)

また、ブラウザがHTMLの修正を行うことに注意してください。だから<table>の中から<table>の外側の要素に<tbody>がない場合、x番号.parent()を実行すると、ブラウザによって異なる結果が生じることがあります。

+6

これはこれを行う方法です。 parent()はDOM構造の知識をあまり必要とするため、変更する可能性があります。あなたが探しているノードにクラスを適用する方がはるかに安全です。 –

+0

ありがとう、これは本当に素晴らしいですが、そのまま答えていません。この10番目の親にクラスまたはIDがない場合はどうなりますか? –

+0

@Silver Light:セレクタには '.parents()'を使います。それは* "私に10試合を与える"と言うセレクタを与える*。このように: '$( 'element_id')。parents( ':eq(9)')'。 – user113716

6

次のポストhereは、この実装を使用しています。

jQuery.fn.getParent = function(num) { 
    var last = this[0]; 
    for (var i = 0; i < num; i++) { 
     if(!last) break; 
     last = last.parentNode; 
    } 
    return jQuery(last); 
}; 
// usage: 
$('#myElement').getParent(3); 

ので、あなたの使用量は、単純に次のようになります。そのHTMLで

var position = $("#test").parents("div").length - 10; 
$("#test").closest("div:eq(" + position + ")").append("here!!!"); 

$('#element_id').getParent(10); 
+1

要素が 'num'より少ない場合、エラーが発生します。 – lonesomeday

+0

前回の反復で 'parentNode'がなければ、ループを解除する必要があります。 'if(!last)break; last = last.parentNode; '(@lonesomeday above) – user113716

+0

@lonesomeday、良い点。ちょうどそれがOPその他に役立つかもしれないと思った。 –

0

私はこのコードを使用しました:

<div> 
     <div> 
      <div> 
       <div> 
        <div> 
         <div> 
          <div> 
           <div> 
            <div> 
             <div> 
              <div> 
               <span id="test">here</span> 
              </div> 
             </div>  
            </div> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 

はい、11桁です。コードを実行すると10番目のdivに停止し、ここに追加する必要があります!

私はこのコードをもっときれいにすることができると確信しています。

クラスを追加する必要はありません。

編集: 私は11 DIVを使用したので、最初のものには行かないことが分かりました。実際には10日に停止します。

関連する問題