Подтвердить что ты не робот

Что означает пробел в селекторе jquery?

Я столкнулся с реакцией, которую сегодня не мог объяснить, работая с каким-то очень простым JQuery сегодня, и я надеялся, что один из вас сможет объяснить мне, что происходит, чтобы привести к этим результатам.

Итак, у меня есть DOM-модель (упрощенная здесь)

<div class="ObjectContainer">
    <div class="Object">
        <div>stuff</div>
    <div class="Object">
        <div>stuff</div>

Идея состояла в том, чтобы установить атрибут последнего объекта с помощью этого кода:

$('div.ObjectContainer').find('div.Object :last').attr("index", "1");

Теперь я понимаю, что код здесь был неправильным, и правильный селектор поиска должен быть "div.Object: last", но это результаты, которые я не понимаю. Когда я выполнил первый код, это произошло:

<div class="ObjectContainer">
    <div class="Object">
        <div index="1">stuff</div>
    <div class="Object">
         <div>stuff</div>

Может кто-нибудь объяснить мне, как мой первоначальный селектор смог установить атрибут для дочернего элемента node?

4b9b3361

Ответ 1

Пробелы указывают совпадение с потомками. Для каждого пространства вы опускаетесь (по крайней мере) на один уровень и применяете селектор к дочерним элементам ранее выбранных элементов.

Например:

div.container.post

Будет соответствовать <div> с классами container и post, а следующее:

div.container .post

... будет соответствовать любому элементу с классом post, который спускается из <div> с классом container.

Это будет соответствовать <div class="container"><p class="post"></p></div>, но оно также будет соответствовать любому .post, независимо от того, насколько глубоко он вложен:

<div class="container">
  <div>
    <div>
      <a class="post"> <!-- matched -->
    </div>
  </div>
</div>

Вы можете думать о нем как о согласии поэтапно: найдены первые элементы, соответствующие div.container, а затем каждый из этих элементов (и всех их подэлементов) находится в поиске совпадений с .post.

В вашем случае div.Object :last сначала находит все теги <div> с классом Object, а затем ищет в каждом из них элементы, соответствующие :last, то есть любой элемент, который является последним элементом в его контейнер. Это относится как к <div index="1">stuff</div>, так и к <div>stuff</div>.

Пространства работают точно так же, как объединение нескольких вызовов на find, поэтому, если вы понимаете, как это работает, вы можете понять, как пробелы влияют на селектор. Они идентичны:

$('div#post ul.tags li');
$('div#post').find('ul.tags').find('li');

Ответ 2

$('div.ObjectContainer').find('div.Object :last') приводит к эффекту дикой карты. он ищет любого ребенка с классом psudo: последний. Таким образом, он просто выбрал div: last. Это эквивалентно $('div.ObjectContainer').find('div.Object div:last')

Ответ 3

Используя jQuery, вы можете найти любой объект DOM, указав его ID, имя класса, тип тега и т.д. или просто найдите родителя, а затем укажите желаемый вложенный ребенок

Например, вы можете найти первый Div. Объект по этому запросу

$('.ObjectContainer .Object:first')

Таким образом, пространство в селекторе jQuery отделяет родительский node и его дочерние элементы