#javascript #jquery #syntax #jquery-selectors #this
#javascript #jquery #синтаксис #jquery-селекторы #это
Вопрос:
Например, если бы я использовал этот код:
$(".Class").children(:last).click(function(){
$(this).siblings(":not(:last)").toggle();
}
Будет ли «this» относиться к классу «.Class» или к последнему дочернему элементу указанного класса «.Class»?
Комментарии:
1. «this» относится к последним дочерним элементам.
Ответ №1:
this
будет ссылаться на элемент DOM, результаты которого совпадают в конечном селекторе в цепочке, которая запускает событие; в данном случае :last
дочерний элемент .Class
. Итак, событие сработает, если вы нажмете на last
дочерний элемент последнего .Class
класса. Посмотрите в этой скрипке, как только foo2
запускается оповещение.
<div class="Class">
<div> </div>
<div> </div>
<div> </div>
<div> </div> <!--This is the last child of .Class-->
</div>
За исключением того, что он не будет работать так, как вы его опубликовали, поскольку :last
должен быть в кавычках в виде строки.
Комментарии:
1. Спасибо за ваш ответ! Я бы и не вспомнил, что мне там нужны цитаты.
Ответ №2:
Это будет ссылаться на выбранный элемент. То есть последний элемент в элементе с классом Class
на момент привязки прослушивателя событий. Если вы добавили еще один элемент после предыдущего последнего элемента в том же родительском элементе после того, как прослушиватель событий уже был привязан, он все равно будет прослушивать то, что ранее было последним, а this
также будет предыдущим последним.
Комментарии:
1. Спасибо за ваш ответ, ваш был довольно запутанным.
2. Хм? Это звучит неправильно.
children()
Функция будет фильтровать его до дочерних элементов.Class
, а не самого.Class
себя.3. @yahelc: Вы правы. Наверное, я недостаточно внимательно читал.
Ответ №3:
Я думаю, что в таком случае это последний ребенок. Это всегда последний элемент, совпадающий перед словом щелчка.
Ответ №4:
Это относится к текущему контексту, в котором вы работаете. В приведенном вами примере это будет относиться к последнему дочернему элементу указанного класса «Class».
Если бы вы должны были сделать следующее:
$(".Class").children().each(function(){
...
});
$(this)
будет ссылаться на каждого дочернего элемента по мере его повторения.