Подтвердить что ты не робот

Каков смысл запятой в селекторе 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;

Что произойдет, если я удалю слово "сильный"?

4b9b3361

Ответ 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'), почти одинаковы.