2012-05-08 1 views
0

を取得するには、フィルタと最も近いを使用して:jQueryとJQM - 私はJQMはそれで行われ、HTMLの一片、このようになります(単純化)を持つインデックス

<div id="servicesList"> 
    <div id="servicesHeader">Services</div> 
    <ul data-role="listview" class="ui-listview"> 
     <li id="Serv1" class="serviceLink">Service 1</li> 
    </ul> 
    <ul data-role="listview" class="ui-listview"> 
     <li id="Serv2" class="serviceLink">Service 2</li> 
    </ul> 
</div> 

このコードは、動的に別のから生成されますスクリプトの一部。

各サービスには、さらに多くのデータを動的に取り込むクリックイベントが付いています。理想的には、クリックされた時点でサービスのインデックスを参照できるようにしたいと考えています。オブジェクトの配列を引き込んservicesHeader div要素を含んでいるよう

$('.serviceLink').click(function() { 
    var index = $(this).closest("ul").index(); 
    servAnimate(index); 
}); 

もちろん、これは動作しません:ここに私の現在のコードです。親ウルスの配列だけを取得するにはどうすればいいですか?基本的に、ユーザーがService 1をクリックすると、返されるインデックスは1ではなく0になります。今すぐインデックス0はservicesHeader divを参照します。

また、私はこれを試してみた:

$(this).closest("ul").filter("ul").index(); 

任意の助けをいただければ幸いです!

EDIT:別の開発者のスクリプトによってHTMLが生成されていることを指定する必要があります。それは変わるかもしれない、それは同じままであるかもしれない。これまでの唯一の保証は、ULが同じレベルに留まり、クラスserviceLinkを持つということです。

もう一度、他の兄弟要素が存在するかどうかにかかわらず、親ULのインデックスを取得するにはどうすればよいですか?

答えて

0

自分の質問に答える敗者のように感じる!

私はindex()を単独で使用するのに慣れているので、修飾子を追加することを忘れてしまいました。さらに、私は、クリックされた要素から逆方向に作業し、その位置を見つけなければならないと仮定していました(すべての回答者に伝えました)。私が代わりにしたのは、コンテナのdiv IDと各リンクのまわりの構造を直接変更しないことに基づいて要素のリストを作成し、そこからクリックされた要素のインデックスを取得することでした:

$('.serviceLink').click(function() { 
    var index = $('#servicesList ul[data-role="listview"] li.serviceLink').index(this); 
    servAnimate(index); 
}); 

この問題を解決するために永遠に助けていただきありがとうございます。

0

サービスリストだけをラップする別のDIV、つまりULを導入してください。次に、.closest('div')はこの新しいdivを見つけ、インデックスはその中でゼロから始まります。

EDIT:

はこのお試しください:私はあなたの要件で何かを見落としてきた場合を除き

DEMO

+0

私はマークアップを制御できませんが、ULは常に同じdivにあり、指定されたように、同じdivに配列が混乱する他の兄弟要素が存在する可能性があります。 –

+0

問題が表示されます。 –

+0

作業フィドルへのコードとリンクが追加されました。 –

1

は、この法案に合うだろうか?

$(function() { 
    $('#servicesList .serviceLink').on('click', function() { 
     alert($('.serviceLink').index(this)); 
    }); 
})​ 

あなたがサービスの1クリックしたときにこれは、0を返し、1 [サービス]をクリックしたとき2.

UPDATE:これは、メインのdiv "servicesList" 内部 ".serviceLinks"

を見つけるだろう
+0

ちょうど1つの問題。他の開発者は、アプリケーションの他のセクションでクラスを再利用することが知られています。 –

+0

かなり冗長ですが、 'var index = $(this)).closest("。serviceList ")。find(" ul ")。index(this.closest(" ul "));' –

+0

それはどちらもうまくいきませんでした。あなたの助けをありがとう! –

0

に何か問題:

$('.serviceLink').click(function() { 
    var index = $(this).closest("ul").index() - 1; 
    alert(index); 
});​ 

http://jsfiddle.net/u4Hy4/

を見ます210
+0

これは、ヘッダーdivが元の位置にとどまり、他のdivが追加されていないことを100%確実に知っていれば機能します(個々のサービスのセクションヘッダーdivなど)。 –

関連する問題