0

jQuery .index()関数で問題が発生しました。だから私がやろうとしているのは、span(.edit)をクリックしたときに、入力フィールド(1つ以上)のインデックスにアラートを出したいということです。私はいくつかのものをテストしていましたが、index()は常に0または-1を返しました。

<div id="wrapper">
    <input class="editInput" type="text" />
    <span>Mr. Foo</span>
    <div>
        <span class="edit">Full name</span>
    </div>

    <input class="editInput" type="text" />
    <span>Foo Town</span>
    <div>
        <span class="edit">City</span>
    </div>
</div>

jQueryステートメント

$(".edit").click(function(){
    alert($(this).parent().siblings(".editInput").index());
}

私は似たようなことをたくさん試しましたが、どれもうまくいきませんでした。

何か案が?

4

3 に答える 3

2

$(this).parent().siblings(".editInput")この場合、はすべての.editInput要素を選択し、引数なしで呼び出すと、その兄弟に対する.index()最初に選択された要素(最初の要素)の位置が取得されます。これは常にここにあります。.editInput0


他の入力要素に対する入力要素のインデックスを取得する場合は、最初にそれらすべてを選択する必要があります。

var $inputs = $('#wrapper .editInput');

input次に、クリックしたものから最も近い前の要素を見つける必要があります。これは、 [docs][docsspan ]で実行できます。.prevAll .first

var $closest_input = $(this).parent().prevAll('.editInput').first();

次に、要素のセットで.index [docs]を呼び出しinput、見つかったものを渡しますinput

var index = $inputs.index($closest_input);

このように呼び出されると.index、選択された要素のセットで渡された要素のインデックスを返します。

于 2013-03-24T00:23:46.860 に答える
1

試す

$("span.edit").click(function(){
    $(this).closest("#wrapper").find(".editInput").each(function(){
        alert($(this).index(":parent .editInput"));
    });
});

http://jsfiddle.net/XZEAS/1

于 2013-03-24T00:22:54.307 に答える
1
$("span.edit").click(function(){
    alert($(this).parent().siblings(".editInput").index());
});

これはあなたがやろうとしていることですか?

http://jsfiddle.net/uJsg8/

于 2013-03-24T00:23:04.477 に答える