#jquery #selector
#jquery #селектор
Вопрос:
Последний «div» прерывает селектор, даже если на селекторе есть «li». что не так? Я хочу получить «d» в случае
<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 для всех кликов