Каков смысл запятой в селекторе jQuery
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<ul>
<li><strong>list</strong> item 1 -
one strong tag</li>
<li><strong>list</strong> item <strong>2</strong> -
two <span>strong tags</span></li>
<li>list item 3</li>
<li>list item 4</li>
<li>list item 5</li>
<li>list item 6</li>
</ul>
<script type="text/javascript">
$('li').filter(function(index) {
return $('strong', this).length == 1;
}).css('background-color','red');
</script>
</body>
</html>
С учетом HTML выше, какой смысл запятой в селекторе ниже?
return $('strong', this).length == 2;
Что произойдет, если я удалю слово "сильный"?
Ответы
Ответ 1
Он устанавливает this
как контекст, из которого выполняется запрос.
Эквивалентный (и несколько более эффективный) способ записи:
return $(this).find('strong').length == 2;
Когда я говорю "эквивалент", я имею в виду за кулисами, он фактически перевернулся в версию выше.
Если вы удалите 'strong'
, у вас не будет действительного селектора. Вы будете делать:
return $(this).find('').length == 2;
Похоже, он просто возвращает пустой объект jQuery, что означает length
будет 0
, поэтому вы не получите никаких элементов из .filter()
.
Ответ 2
Если вы удалите тег STRONG, он проверит, содержит ли какой-либо из LI символ строки 1, независимо от того, были ли они инкапсулированы в тег STRONG.
В этом случае результаты не будут выделены.
Селекторы, такие как $('strong', this) и $(this).find('strong'), почти одинаковы.