Странное поведение с .parents () и .closest () при попытке вернуть идентификатор родительского <ul>элемента в jQuery - PullRequest
0 голосов
/ 14 октября 2011

Итак, у меня есть 2 <ul> контейнера каждый с идентификаторами.Внутри них есть список <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");

Это имеет то же поведение, что и выше, но оповещениявместо списка 'Players-List'.

Так что при использовании closest () он возвращает самый первый <ul> id, но при использовании parent () он возвращает самый последний <ul> id.

Кто-нибудь знает, что происходит с этим дурацким поведением?

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

Ожидаемое поведение.

Вы должны использовать:

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

$(this) точек на нажатых .close.

$(".close") точек на первойодин найден.

1 голос
/ 14 октября 2011

Это потому, что вы запускаете этот селектор из обработчика кликов, вы должны использовать это вместо:

var $currentId = $(this).closest("ul").attr("id");
0 голосов
/ 14 октября 2011

Попробуйте использовать эту функцию, чтобы получить родителя:

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

Я никогда не использовал функцию .closest (), но в соответствии с jQuery должно работать то, что вы указали.В любом случае, попробуйте это и скажите мне, как это происходит.

Вам также нужно сделать так, чтобы он выбирал текущий элемент, используя $ (this)

...