различие между: сначала и: первый ребенок, не ясный

у меня есть список лития ул.

<ul>
<li>Parent
    <ul>
       <li>
          child1
       </li>
       <li>
          child2  
       </li>

    </ul>
</li>
</ul>

и я пытаюсь использовать селектор jQuery('ul li:first') и jQuery('ul li:first-child') оба предоставления того же результата, это делает меня смущенным различием между этими двумя, является там примером, который разъясняет различие между двумя селекторами

20
задан CMS 31 May 2010 в 22:49
поделиться

3 ответа

Из официальных документов:

Псевдокласс: first эквивалентен к: уравнение (0). Его также можно было бы записать как : lt (1). Хотя это соответствует только одиночный элемент,: first-child может совпадать более чем с одним: по одному для каждого родитель.

В то время как : first соответствует только одному элементу, селектор : first-child может соответствовать более чем одному: по одному для каждого родителя. Это эквивалентно : nth-child (1) .

http://api.jquery.com/first-selector/

Обновление:

Вот пример использования : first-child :

http: // jsbin. com / olugu

Вы можете просматривать его и редактировать самостоятельно. Если вы замените : first-child на : first , там будет выделено только первое слово. Это то, что для них определено.

А вот пример использования : first :

http://jsbin.com/olugu/2

27
ответ дан 29 November 2019 в 23:40
поделиться

Иногда, но не всегда, результат будет (и должен) быть таким же.

Учитывая ваш HTML:

jQuery('ul li:first').length; // Returns 1

jQuery('ul li:first-child').length; // Returns 2

Итак, вы можете видеть, что первая строка возвращает только первый элемент li .

Вторая строка возвращает оба элемента li , которые являются первым потомком своего родителя.

: first возвращает первое в согласованном наборе.

: first-child возвращает элементы, которые являются первым дочерним элементом своего родителя.

Первый элемент li в вашем HTML также является первым дочерним элементом, хотя использование : first-child дает больше результатов при проверке свойства length . .

На самом деле вы могли бы объединить два селектора, если вам нужно только первое совпадение, которое является первым дочерним элементом.

jQuery('ul li:first-child:first').length; // Returns one
9
ответ дан 29 November 2019 в 23:40
поделиться

Из вашего примера:

$('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 отфильтрует любой элемент из этого списка, который не является первым дочерним элементом своего родителя. В этом случае

  • child2
  • отфильтровывается, поскольку он был вторым дочерним элементом
      .

      $('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 результатов, поскольку не является первым дочерним элементом div.

      $("div span:first-child")
      

      Хороший способ понять first-child - представить его как фильтр, который отфильтрует любой элемент в текущем наборе результатов, если он не является самым первым дочерним элементом своего родителя.

    5
    ответ дан 29 November 2019 в 23:40
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: