Из вашего примера:
$('ul li'); // Returns all 3 li's
// <li> Parent ... </li>
// <li> child1 </li>
// <li> child2 </li>
$('ul li:first'); // Returns the first li of all matching li's from above
// <li> Parent ... </li>
Если у нас есть все три результата первого селектора $("ul li")
, тогда :first-child
отфильтрует любой элемент из этого списка, который не является первым дочерним элементом его родителя. В этом случае <li> child2 </li>
отфильтровывается, потому что это был второй дочерний элемент <ul>
.
$('ul li:first-child'); // Returns all li's that are the first child of any ul
// <li> Parent .. </li>
// <li> child1 </li>
Кроме того, для селектора first-child элемент должен быть самым первым дочерним элементом в DOM, а не в наборе результатов jQuery. Например, с заданной структурой:
<div>
<h1>First</h1>
<span>Second</span>
<span>Third</span>
</div>
приведенный ниже запрос даст 0 результатов, поскольку <span>
не является первым потомком div.
$("div span:first-child")
Хороший способ понять first-child
- это думать о нем как о фильтре, который отфильтровывает любой элемент в текущем наборе результатов, если он не является первым дочерним элементом своего родителя.