Как JQuery выбирает элементы под капотом?

Мне было интересно, как jquery действительно работает внутри. Например, я хочу знать, как работают селекторы jquery под капотом? Он перебирает все элементы DOM? Или у него есть другой волшебный алгоритм поиска элементов?

И чем он отличается от функций .find() и .filter()?

У вас есть идеи?


person Pouyan    schedule 18.01.2014    source источник
comment
Используйте это, чтобы упростить просмотр исходного кода jquery: james.padolsey.com/jquery   -  person techfoobar    schedule 18.01.2014
comment
Используйте исходный код github.com/jquery/jquery.   -  person Saravana    schedule 18.01.2014
comment
Относительно .find() и .filter(): stackoverflow.com/questions/2438223/   -  person Jonathan Lonowski    schedule 18.01.2014


Ответы (1)


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

Как и jquery:

for each element in given subtree/input set do
  if element matches selector do 
     add element to output set
  end if
end for
return output set

Таким образом, задача имеет вычислительную сложность O(N), где N — количество элементов DOM во входном наборе.

Есть довольно много возможных трюков/оптимизаций, но в целом это так сложно.

Некоторые селекторы jQuery имеют еще большую сложность, например, этот селектор $( "li:has(ul)") имеет вычислительную сложность O(N*N), поэтому используйте его с осторожностью.

person c-smile    schedule 18.01.2014