Очень простой вопрос о parent () и prev() в jQuery


Я обрабатываю событие click гиперссылки с помощью функции JavaScript. Я хочу получить данные из гиперссылки.

Страница выглядит так:

<div class="div1">
   <div title="Title 1" class="div2">
      <p class="p1"><a class="linkJs">The link in question</a></p>
   </div>
</div>

<div class="div1">
   <div title="Title 2" class="div2">
      <p class="p1"><a class="linkJs">The link in question</a></p>
   </div>
</div>

И JavaScript что-то вроде этого:

$(function() {
   $('a.linkJs').click(function(){
      value=$(this).parent().prev().text();
      alert(value);
   });
});

Что я хочу иметь, так это значение названия в div2. Перейдя по первой ссылке, я получаю: название 1. И, нажав на 2-й: название 2.

Это должно быть очень, очень просто, но я просто не могу найти свой ответ нигде.

Спасибо.

5 2

5 ответов:

Вы можете найти его с помощью ближайшего метода:

   $('a.linkJs').click(function(){
      value=$(this).closest('div').attr('title');
      alert(value);
   });

Вы хотите использовать closest

var value = $(this).closest('div').attr('title');

Ваша проблема заключается в том, что тег <p> не является родственным для <div>, но дочерним, поэтому вам придется сделать parent() дважды - хотя в этом нет необходимости, поскольку функция closest является удобным ярлыком. Кроме того, функция text() возвращает чистое текстовое содержимое внутри тега, Если вам нужен атрибут заголовка тега, вам нужно использовать функцию attr.

Попробуйте использовать метод closest(): http://api.jquery.com/closest/

Получаем первый элемент-предок, который соответствует селектору, начиная с текущий элемент и продвижение вверх через дерево дом.

$(function() {
    $('a.linkJs').click(function(){
        value=$(this).closest(".div2").attr("title");
        alert(value);
    });
});
var value = $(this).closest('.div2').attr('title');

Вместо использования div, .div2 может быть более подходящим селектором, потому что внутри div.div2 могут быть другие элементы div.

Не очень красиво, но это тоже должно сработать.

$(function() {
    $('a.linkJs').click(function(){
        value=$(this).parents()[1];
        alert($(value).attr('title'));
    });
});