Действительно ли этот селектор допустим? и к какому $ (это) относится?
$('div', $(this).parents('div'))
я просто изучаю JavaScript и jQuery, спасибо
Это действительно так. Он берет все родительские div для this
, а затем находит все находящиеся под ними div. Разбивка на части:
var jq = $(this); // Get a jQuery object for `this`
var parents = jq.parents('div'); // Find all of its parents that are divs
var divs = $('div', parents); // Find all divs under those parent divs
Результатом является объект jQuery с совпадениями для всех div, которые являются потомками div, которые являются родителями this
. Подробнее здесь и здесь .
Пример: Предположим, что this
изначально ссылается на input
элемент foo
ниже:
<div id='d1'>
<div id='d2'>
<input id='foo' type='button'>
<div id='d3'>
...
</div>
</div>
<div id='d4'>
<div id='d5'>
...
</div>
</div>
</div>
$ (this) .parents ('div')
будет соответствовать d1
и d2
. Тогда $ ('div', Родители)
будет соответствовать:
d3
d2
(потому что это не только один из родителей, но и дочерний элемент d1
]) d4
d5
Фактически:
$('div', $(this).parents('div'))
Функция jQuery ( jquery ()
или $ ()
) требует хотя бы одного параметра селектора, а второй необязательный - для контекста, в вашем примере $ (this) .parents ('div')
.
Итак, приведенный выше код будет выполняться на $ (div)
, который находится внутри контекста $ (this) .parents ('div')
. Однако это не так уж часто, в большинстве случаев это выглядит так:
$('#element').click(function(){
$('div', this).addClass('some class');
});
В приведенном выше случае this
относится к #element
, а затем добавляет класс к div
внутри него.