0

だから私は<ul>それぞれIDを持つ2つのコンテナを持っています。それらの中には要素のリストがあり<li>ます。

1つ目<ul><ul id="coaches-list">です。2番目は<ul id="players-list">です。

<li>それぞれの中にcloseというID(セレクターとして使用しているリンク)を持つタグがあり、<li>クリックすると各ノードが削除されます。各コンテナをターゲット<ul>にして、それがどこから来ているかを確認しようとしています。

私のHTMLは次のとおりです。

                <!-- coaches box -->
                <div class="box">
                    <div class="heading">
                        <h3 id="coaches-heading">Coaches</h3>
                        <a id="coaches" class="filter-align-right">clear all</a>
                    </div>
                    <ul id="coaches-list" class="list">
                        <li><span>Hue Jackson<a class="close"></a></span></li>
                        <li class="red"><span>Steve Mariuchi<a class="close"></a>                     </span></li>
                    </ul>
                </div>

                <!-- players box -->
                <div class="box">
                    <div class="heading">
                        <h3 id="players-heading">Players</h3>
                        <a id="players" class="filter-align-right">clear all</a>
                    </div>
                    <ul id="players-list" class="list">
                        <li><span>Steve Young<a class="close"></a></span></li>
                        <li><span>Gary Plummer<a class="close"></a></span></li>
                        <li><span>Jerry Rice<a class="close"></a></span></li>
                    </ul>
                </div>

jQueryのタグの削除機能は次のとおりです。

function removeSingleTag() {
    $(".close").click(function() {

                    var $currentId = $(".close").closest("ul").attr("id");
                    alert($currentId);

        // find the closest li element and remove it
        $(this).closest("li").fadeOut("normal", function() {
            $(this).remove();
            return;
        });
    });
}

特定の各タグをクリックすると、クリックした適切なタグが削除されますが、$ currentIdにアラートを送信している場合は、次のようになります。

            var $currentId = $(".close").closest("ul").attr("id");

<ul id="coaches-list" class="list"></ul>との両方で閉じるセレクターをクリックすると、「coaches-list」に警告します。<ul id="players-list" class="list"></ul>

これを次のように変更した場合:

            var $currentId = $(".close").parents("ul").attr("id");

上記と同じ動作ですが、代わりに「players-list」に警告します。

したがって、closest()を使用すると、最初の<ul>IDが返されますが、parents()を使用すると、最後の<ul>IDが返されます。

誰もがこの奇抜な行動で何が起こっているのか知っていますか?

4

3 に答える 3

2

予想される動作です。

次を使用する必要があります。

var $currentId = $(this).closest("ul").attr("id");

$(this)クリックされたポイント.close

$(".close")最初に見つかったものを指します。

于 2011-10-14T07:48:05.510 に答える
1

クリックハンドラーからセレクターを実行するため、代わりにこれを使用する必要があります。

var $currentId = $(this).closest("ul").attr("id");
于 2011-10-14T07:48:54.867 に答える
0

この関数を使用して親を取得してみてください。

var $currentId = $(this).parents().first();

.closest()関数を使用したことはありませんが、jQueryによると、指定したものは機能するはずです。いずれにせよ、それを試してみて、どうなるか教えてください。

また、$(this)を使用して現在の要素を選択するようにする必要があります。

于 2011-10-14T08:02:26.837 に答える