Как мне узнать, что проходит DOM, а что нет?
$('div p')
Похоже, что при этом возвращаются все элементы div, а затем выполняется повторное сканирование P-элементов в каждом элементе dom, который был возвращен при первом поиске div.
$('div .foo')
Классовые, похоже, не сканируют дом. Они фильтруют только предыдущий список $ ('div') для элементов, которые содержат классы foo. Если дочерний элемент $ ('div') имеет класс foo, он не выбирается.
$('div, div')
Не содержит обманщиков. Таким образом, кажется, что сканирование выполняется только один раз со списком лямбд, которые либо сравниваются, либо нет. Но это действительно сбивает с толку, когда у вас есть фильтры вроде: contains ('x'), которые, кажется, могут самостоятельно возвращать dom.
Так как же работают эти селекторы? Обрабатывает ли div .foo сначала только div, а затем выполняет фильтрацию для классов, содержащих foo, или он каким-то образом превращается в вычисление, которое говорит, что когда tag == Div && class == foo. Как насчет того, когда есть несколько селекторов? Они появляются в том порядке, в котором они появились на странице, без обманщиков, поэтому я чувствую, что сканировал дом только один раз. Может быть, он просто сортирует и удаляет дубликаты перед возвратом?