2

私は次のhtml構造を持っています

<div class="someClass">
    <button class="actionButton" id="b0"></button>
</div>
<div class="otherClass">
    <button class="actionButton" id="b1"></button>
    <button class="actionButton" id="b2"></button>
    <button class="actionButton" id="b3"></button>
    <button class="actionButton" id="b4"></button>
</div>

actionButton クラスをセレクターとして使用して、dom のインデックスに基づいてボタンを非アクティブ化する関数を使用します。

function DisableButtons(indexes, disable) {
    $('.actionButton').each(function () {
        $this = $(this);
        alert($this[0].id + " index: " + $this.index());
    });
}

私のアラートは次の出力を示しています

b0 index: 3
b1 index: 0
b2 index: 1
b3 index: 2
b4 index: 3

最初の div ラッパーのボタンは、2 番目の div ラッパーの最後のボタンと同じインデックスを持ちます。これはマークアップの問題ですか?

2 番目の div ブロックのボタンが正しく返される様子を見ると、問題はマークアップ/セレクターに関連しているとしか思えません。マークアップを変更せずにこの問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

引数を省略すると、.index() は、一致した要素のセット内の最初の要素の位置を、その兄弟に対して返します。

これを試して -

$('.actionButton').index($this)それ以外の$this.index()

出力:

b0 index: 0 
b1 index: 1 
b2 index: 2 
b3 index: 3 
b4 index: 4 

デモ--> http://jsbin.com/esupev/2

于 2013-05-20T19:22:10.050 に答える
1

それ以外の

$this.index()

試す

$('.actionButton').index($this)

この方法で index メソッドを使用すると、一致した要素の中から特定の要素を検索します。

フィドルをチェック

のすべてのボタンに基づいてボタンのインデックスを取得しますclass="actionButton"

于 2013-05-20T19:16:33.960 に答える