Jquery ("li: last-child") не работает правильно - PullRequest
2 голосов
/ 19 октября 2011

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

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"));
})

Ответы [ 4 ]

2 голосов
/ 19 октября 2011

Последний ребенок вашего ul - это div, а не li с содержанием d.

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

2 голосов
/ 19 октября 2011

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

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

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

1 голос
/ 19 октября 2011

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

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

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

0 голосов
/ 19 октября 2011

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

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

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

...