JQuery: получить идентификатор родительского элемента для выбранного элемента. - PullRequest
8 голосов
/ 29 марта 2012

У меня есть такой div:

<div id="popupDiv1" class="popupDivClass">
    <a id="popupDivClose" class="popupCloseClass">x</a>
</div>

Когда я нажимаю на 'x' (я хочу запустить функцию jquery с именем disablePopup(id);, где id - это идентификатор отвечающей за вызов popupDiv (Iу меня есть много popupDiv, каждый со своей собственной кнопкой X.

, чтобы сделать это, я реализовал следующее

$(".popupCloseClass").click(function (event) {
    var buttonID = $(event.target).attr("id");
    var id = $( buttonID).closest("div").attr("id");
disablePopup(id);
});

, по сути, я получил идентификатор popupCloseClass, а затем получил идентификаторparent (соответствующий popupDiv) через ближайший метод. Затем я вызываю disablePopup.

Но это не работает.

Я даже пытался использовать метод var buttonID = $(buttonID).parent().attr("id");, но тоже не работал.

Я также пытался var id = this.id;

Любая помощь с благодарностью

Спасибо

Ответы [ 4 ]

13 голосов
/ 29 марта 2012

вместо closest вы можете использовать parent вот так ...

var id = $(this).parent().attr("id");

Обратите внимание, что вы можете использовать ключевое слово this для ссылки на элемент, с которого началось событие.Как вы имеете, вы используете значение buttonID в качестве селектора элемента, который будет иметь значение "popupDivClose", и без добавления # в начале он не будет искать идентификатор, а скорее элемент теганазывается "popupDivClose".

Если вы хотите продолжать использовать buttonID, вы могли бы использовать эту строку кода, чтобы заставить его работать ...

var id = $("#" + buttonID).parent().attr("id");

Однако я бы предпочел написатьвсе событие, например, так ...

$(".popupCloseClass").click(function (event) {
    event.preventDefault();

    var id = $(this).parent().attr("id");

    disablePopup(id);
});

обратите внимание на использование event.preventDefault();, это гарантирует, что браузер не будет обрабатывать естественное действие для щелчка по ссылке (то есть навигации по странице) - хотя в Chromeпо крайней мере, вам все равно нужно указать значение href для навигации

Вот рабочий пример

0 голосов
/ 29 марта 2012

Это должно работать:

$(".popupCloseClass").click(function (event) 
{
    var buttonID = $(this).parent().attr('id');
    disablePopup(buttonID);
});
0 голосов
/ 29 марта 2012

Это прекрасно работает:

$('a.popupCloseClass').click(function() {
    var id = $(this).parent().attr('id');
});​

JSFiddle Demo

Вы должны просто использовать this вместо способа получения идентификатора, а затем пытаться использовать его как селектор (вы пропустили # до идентификатора):

0 голосов
/ 29 марта 2012

Вы должны сделать

$(".popupCloseClass").click(function (event) {
    var id = $(this).closest("div").attr("id");
});

(вы также можете использовать $(this).parent().attr("id");), но использование ближайшего безопаснее в случае изменения структуры HTML

...