#javascript #jquery
#javascript #jquery
Вопрос:
Три нижеприведенных селектора jQuery дают одинаковый результат. В чем разница?
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p><span>Hello</span>, how are you?</p>
<p>Me? I'm <span>good</span>.</p>
<script>
$('p > span').css('color','red');
OR
$('span', 'p').css('color','red');
OR
$('p span').css('color','red');
</script>
</body>
</html>
Ответ №1:
$('span', 'p')
и $('p span')
идентичны, оба будут выбирать любые элементы span, которые являются потомками любого элемента p, независимо от глубины.
$('p > span')
с другой стороны, будут выбраны элементы span, которые являются прямыми дочерними элементами элемента p. Так, например, этот селектор не выбрал бы элемент span в следующем примере:
<p>
<a href="#">
<span>Test</span>
</a>
</p>
.. в то время как два других выбрали бы это просто отлично.
Ответ №2:
Разница в том, что p > span
совпадает только в том случае, если интервал является прямым потомком абзаца.
Учитывая эту разметку:
<p><div><span>Hello</span>, how are you?</div></p>
<p>Me? I'm <span>good</span>.</p>
селектор p > span
будет соответствовать только интервалу во втором абзаце.
Ответ №3:
Первый — это дочерний селектор
Второй — это множественный выбор
Третий — это селектор-потомок
Все ссылки относятся к jquery API
Комментарии:
1. Нет, второй не является множественным селектором, это два селектора, где второй используется как контекст для первого. Множественный селектор был бы
$('span, p')
, который, конечно, не дает того же результата, что и другие.