2014-12-16 2 views
6

Я начал работать над некоторым проектом, а в коде я нахожу комбинации $ (document) .find ('selector'). и $ ('selector'). Я не могу найти настоящую причину, почему это делается. Я там какой-то существенный differsece между этими двумя, так что они используются одновременно в проекте? следует ли в некоторых случаях отдать предпочтение одному другому?

+1

с помощью переключателя вы непосредственно к элементам, которые вы хотите, с помощью функции поиска() вы будете искать РОМ найти элементы, которые будут принимать больше – Mivaweb

+1

@VDesign с помощью '$ («DIV»)' по-прежнему требует искать в целом DOM, не так ли? – Regent

+0

@Regent правильно! – Mivaweb

ответ

6

$(document).find("selector") и $("selector") будут соответствовать одному и тому же набору элементов.

Там нет причин использовать $(document).find(...) над только $(...), и несколько причин не:

  1. Это больше писать и более неудобно читать, раздувая размер сценария

  2. Это приводит к более маслобойки памяти (более временные объекты получают создано/уничтожено)

  3. Это медленнее - http://jsperf.com/vs-document-find, http://jsperf.com/selector-vs-find-again

enter image description here

+0

1. Без всяких сомнений. 2. Было ли это указано где-то или может быть каким-то образом протестировано? Это звучит логично, но тем не менее ... 3. Для идентификаторов ожидается результат, но для базового селектора я не вижу большой разницы (ну, селектор выигрывает там тоже, да). – Regent

+0

@Regent: Re 2: '$ (document)' выделяет и возвращает объект, тогда '.find (" selector ")' выделяет и возвращает объект * new *. –

1

$(document).find(selector) и $(selector) оба ищут селектор в документе.

3

Они функционально эквивалентны. Нет никакой разницы в поведении между $("selector"), $(document).find("selector") и $("selector", document).

Что касается производительности, некоторые варианты могут быть немного медленнее, чем другие (поскольку эти методы реализованы в терминах других). Это, однако, детализация реализации и может быть изменена между выпусками. Бенчмаркинг определенного выпуска наверняка скажет.

+1

Gratuitous perf: http://jsperf.com/vs-document-find '$ (document) .find (...)' также приводит к большему сбою памяти (как и '$ (" selector ", context)' as все, что происходит, - это jQuery, преобразующий его в '$ (context) .find (« selector »)). –