0

所以我有 2 个<ul>容器,每个容器都有 id。它们里面是一个<li>元素列表。

第一个<ul><ul id="coaches-list">。第二个是<ul id="players-list">

每个标签<li>中都有一个名为 close 的标签(这是我用作选择器的链接),<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><ul id="players-list" class="list"></ul>

如果我将其更改为:

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

它具有与上述相同的行为,但会提醒“玩家列表”。

因此,当使用最接近()时,它会返回第一个<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 回答