JQuery селекторы - родительские проблемы - PullRequest
1 голос
/ 17 июня 2010

У меня есть переключатель эмоций, который открывается, когда пользователь нажимает на запись в дневнике.Я работал так, что панель выбора эмоций скрыта в верхней части страницы.Когда пользователь нажимает на «элемент управления эмоциями», связанный с записью, я использую JavaScript, чтобы взять HTML-код панели выбора эмоций в верхней части страницы и вставить его рядом с записью.

Использование Firebug,Вот как будет выглядеть готовый продукт на странице (фрагмент из элемента inspect).Я пытаюсь получить идентификатор для класса 'emote-control-container', который содержит идентификатор записи:

<td>
    <div id="1467002" class="emote-select emote-default">&nbsp;</div>
    <div class="emote-control-container" id="emote-controls-1467002">
    <div id="emote-control-selector">
        <div id="emote-control-selector-body">
            <ul>
                <li id="emote-1"><img src="/images/default_emote.gif?1276134900" class="emote-image" alt="Default_emote"></li>
                <li id="emote-2"><img src="/images/default_emote.gif?1276134900" class="emote-image" alt="Default_emote"></li>
                <li id="emote-3"><img src="/images/default_emote.gif?1276134900" class="emote-image" alt="Default_emote"></li>
                <li id="emote-4"><img src="/images/default_emote.gif?1276134900" class="emote-image" alt="Default_emote"></li>
            </ul>
        </div>
        <div id="emote-control-selector-footer">
            &nbsp;
        </div>
    </div>
</div>
                    </td>

Мне нужен идентификатор записи вместе с идентификатором emote, чтобы сделать сообщение через AJAX, когдапользователь выбирает эмоцию на панели выбора, нажимая на нее.

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

  jQuery('li').live('click', function(e) { 
    e.preventDefault;
    var emoteId = this.id;
    alert(emoteId);
  });

У меня проблемы с поиском DOM, чтобы получить идентификатор элемента из '.emote-control-container.

Я пробовал все, но я ожидал, что это сработает,но это не так:

  jQuery('li').live('click', function(e) { 
    e.preventDefault;
    var entryId = jQuery(this.id).parent(".emote-control-container").attr("id");
    alert(entryId);
  });

Что я делаю не так?Я не могу настроить таргетинг на идентификатор .emote-control-container.

1 Ответ

1 голос
/ 17 июня 2010

Вы хотите .closest() здесь, вот так:

jQuery('li').live('click', function(e) { 
  e.preventDefault;
  var entryId = jQuery(this).closest(".emote-control-container").attr("id");
  alert(entryId);
});

Вызов .parent(selector) получает только немедленный parent , если соответствует селектору, он не продолжает повышаться, пока не найдет его (что немного нелогично). .closest(selector) поднимается , пока не достигнет селектора, который вам нужен.

...