2011-10-11 20 views
6

内のすべてのマッチした要素間で現在の要素のインデックスを取得:私はこのようになりますDOM構造持つDOM

<div class="chapter"> 
    <section></section> 
    <section></section> 
</div> 
<div class="chapter"> 
    <section></section> 
    <section></section> 
    <section class="current"></section> 
    <section></section> 
</div> 
<div class="chapter"> 
    <section></section> 
    <section></section> 
    <section></section> 
    <section></section> 
</div> 

を、私は現在の「のクラスでセクションのインデックス番号を取得したいです"をすべてのセクションに渡って表示します。この例では、5番目のセクションタグであり、現在のクラスを含んでいるため、そのインデックスは5になります。

これをjQueryでどのように取得できますか?

私は、DOM内のすべてのセクションのリストを取得するために、この使用を開始しました:

alert($(sections+'.current').index()); 
:私は試してみて、私が望む結果を得るために、このようなことを試してみた

var sections = $('section'); 

これはjsエラーを返します。

私はここで何が欠けていますか?ありがとう!このような

答えて

11

$('section')のコードでは、すべてのセクションがjqueryオブジェクトとして返されます。これはあなたに $('sections')として4が戻ってくるだろうクラスの現在のセクションの相対的な指標を、返します

sections.index($(".current")); 

:それらの中でも、あなたがこれを行うことができますcurrentのクラスを持っているセクションのインデックスを取得しますあなたはすべてのセクションの要素を含むjQueryオブジェクトのArray(0の添字付き)です。したがって一致する要素は5番目の要素であり、インデックスは4を返します。 希望fiddleが役に立ちます。

+0

これは実際にはうまくいくようですが、実際にはhttp://jsfiddle.net/uae2U/でテストしましたが、残念ながら私のコードでは-1を返しています。これは私を近づけます。だから感謝! – Cory

+0

-1を返した場合、おそらくセレクタに間違いがあります。 index()は一致するものがなければ-1を返します。 –

0

変更

var sections = 'section'; 

あなたのコードはこれを行うと

alert($($('section')+'.current').index()); 
+0

ありがとうございますが、私はそれがどのように役立つかは分かりません。 var sections = 'section'を設定します。テキスト文字列を作成する以外に何もしません。 – Cory

+0

このように使用する必要がある場合は、var sections = $( 'section'); このアラートだけを使用します(sections.hasClass( 'current')。index()); –

6
$('.current').index('section'); 

その間違っているがindex上のドキュメントを参照してください。

セレクタ文字列が引数として渡された場合、.index()はセレクタと一致する要素を基準にした元の要素の位置を示す整数を返します。要素が見つからない場合、.index()は-1を返します。

+0

これも動作します。ありがとう! – Cory

関連する問題