Из вашего примера:
$('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>
Кроме того, для выбора первого ребенка, элемент должен быть самым первым ребенком в DOM, а не в наборе результатов JQuery. Так, например, с заданной структурой:
<div>
<h1>First</h1>
<span>Second</span>
<span>Third</span>
</div>
запрос ниже 0 даст результаты, как <span>
не первый-ребенок дел.
$("div span:first-child")
Хороший способ понять first-child
бы думать об этом как фильтр, который будет отфильтровывать любой элемент в текущем наборе результатов, если это не очень первый ребенок от его родителей.
Я держал пари, что это на самом деле не дает тот же результат. – Pointy
Да, вы можете написать, что я определенно делаю что-то не так :-) –
Возможно, это даст тот же результат, если вы сделали что-то вроде 'jQuery ('ul li: first-child'). Html()', который будет только отображать HTML-код * first * match, хотя есть два. – user113716