Пробелы указывают на совпадение с потомками. Для каждого пространства вы спускаетесь (как минимум) на один уровень и применяете свой селектор к дочерним элементам ранее выбранных элементов.
Например:
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');