jQuery выбирает родителя

#jquery #jquery-selectors #selector #parent-child #parent

#jquery #jquery-селекторы #селектор #родитель-потомок #родитель

Вопрос:

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

 <?
if(isset($content))
{
    $i = 1;
    foreach($content as $item)
    {
        echo "<li><a href='#' name='" . $item['id'] . "'>" . $item['title'] . "</a></li>";
        $i  ;
    }
}
?>
  

Я добавил функцию к этим ссылкам с помощью jQuery для обработки вызова ajax. Я выбираю ссылки следующим образом:

     $("#tips_list ul li a").click(function(e)   { //... }
  

Однако это не имеет большого смысла, потому что теперь вам нужно щелкнуть по фактическому тексту вместо элемента списка. Итак, я решил переструктурировать свой HTML, чтобы тег привязки обтекал li тег.

     `<a href="#" name=""><li>foo</li></a>`
  

Затем я соответствующим образом изменил свой код jQuery:

     $("#tips_list ul a li").click(function(e)   { //... }
  

Однако, теперь, когда я нажимаю .., он захватывает тег элемента списка как $(this) ; что означает, что я не могу действительно захватить атрибут name из тега привязки. Итак! Что мне нужно сделать, так это захватить name атрибут из родительского тега привязки. И я, честно говоря, понятия не имею, какой самый простой способ это сделать. У меня нет такого опыта работы с jQuery.

Большое спасибо за помощь мне!

Комментарии:

1. $(this).parent() не работает? Вам также следует подумать об обновлении вашего css, чтобы лучше обрабатывать ваши LI.

2. Не ставьте a вокруг li , это недопустимо.

Ответ №1:

Сохраните старую разметку. Более поздний вариант довольно капризный и использует следующий скрипт.

 $("#tips_list ul li").click(function(e)   {
    var name = $(this).children("a").attr("name");
    alert(name);
}
  

Ответ №2:

Как насчет того, чтобы вернуться к исходному методу и установить #tips_list ul li a {display:block} в вашем CSS? Это должно заставить a расширяться и занимать весь li, делая весь li доступным для просмотра. После этого ваш исходный код должен работать нормально.

Комментарии:

1. Хорошо, очевидно, я слишком усложнял это для себя, и был гораздо более простой способ, не связанный с jQ. Огромное спасибо!

Ответ №3:

Чтобы получить родительский элемент, вам просто нужно использовать $(this).parent() Поэтому я бы сделал это: $(this).parent('a').attr('name');