Jquery («li: последний потомок») работает неправильно

#jquery #selector

#jquery #селектор

Вопрос:

Последний «div» прерывает селектор, даже если на селекторе есть «li». что не так? Я хочу получить «d» в случае

http://jsfiddle.net/46u8G/2/

 <ul>
    <li>a</li>
    <li>b</li>
    <li>c</li>
    <li>d</li>
    <div></div>
</ul>

$("li").click(function(){
    alert($(this).is("li:last-child"));
})
  

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

1. div является недопустимым дочерним элементом ul в разметке примера.

2. да, но представьте какой-нибудь другой случай с разделениями и промежутками. jsfiddle.net/46u8G/4

Ответ №1:

Выберите последний элемент впереди, затем выполните сравнение:

 var last = $('li:last');
$("li").click(function(){
    var isLast = this == last[0];
    alert(isLast);
});
  

Но для этого вам нужно будет использовать правильную разметку (например, без <div> дочерних элементов <ul> ).

Ответ №2:

Последним вашим дочерним ul элементом является the div , а не li with content d .

Удалите div, и он будет работать.

Ответ №3:

Это для вашего другого примера:

   $("#init").children().each(function(){$(this).click(function(){
  alert($(this).is(":last-child"));
  })
  })
  

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

Ответ №4:

Потому что он ищет последнего дочернего элемента, а не последний элемент в селекторе. Однако jQuery поддерживает :last псевдоэлемент.

 $("li").click(function(){
    alert($(this).is("li:last"));
})
  

Кроме того, a ul не может содержать a div . ul s предназначены для списков и должны содержать только li s (или другие ul s для вложенных списков), но это не повлияет на выбор jQuery… это просто недопустимая разметка HTML.

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

1. это предупреждение true для всех кликов