Я вижу, что комментарии отвечают на вопрос справедливо; но я бы хотел остановиться на одном вопросе, поднятом Ори Дрори. Хотя селектор :first
похож на :first-child
, есть внутреннее различие.
Давайте воспользуемся тем же примером, который приведен в вопросе:
<p>List 1:</p>
<ul>
<li>Coffee</li>
<li>Milk</li>
<li>Tea</li>
</ul>
<p>List 2:</p>
<ul>
<li>Coffee</li>
<li>Milk</li>
<li>Tea</li>
</ul>
<button>Click me</button>
Когда мы запустим следующее скрипт:
$(document).ready(function(){
$("button").click(function(){
$("ul li:first").hide();
});
});
Элемент <li>Coffee</li>
, присутствующий в Списке 1, скрывается. Однако тот, что присутствует в списке 2, остается видимым.
Если вместо этого мы должны будем использовать селектор :first-child
следующим образом:
$(document).ready(function(){
$("button").click(function(){
$("ul li:first-child").hide();
});
});
Оба элемента <li>Coffee</li>
будут скрыты.
Это потому, что селектор :first
обращается к первому узлу DOM, который удовлетворяет заданным условиям, то есть к первому элементу, выбранному под данным селектором.
В то время как селектор :first-child
более конкретен c и выбирает узел, который является первый дочерний элемент его родительского элемента. Как мы видим, второй элемент <li>Coffee</li>
является первым дочерним элементом списка <ul>List 2</ul>
Следовательно, если мы используем второй сценарий, оба элемента будут скрыты.
Надеюсь, это прояснит ваши сомнения. На мой взгляд, лучшей практикой было бы использование класса или идентификатора и более точное указание c при различении этих элементов, когда это необходимо.