У меня следующая установка:

 var el = $("#overParent");
 // Do whatever with el here.
 var cls = $(".valueElement", "#parent"); // Get elements with class valueElement inside element with id parent
 // Do whatever

Это работает, но мне было интересно, смогу ли я сделать это быстрее. Я знаю, что #parent - это элемент внутри #overParent, который уже выбран. Могу ли я каким-то образом использовать это для сканирования только el #overparent на наличие #parent, а затем получить элементы с указанным классом?

Что-то вроде: $(".valueElement", "#parent", el), но согласно документации $ принимает только 2 параметра.

1
zozo 23 Янв 2013 в 12:47

3 ответа

Лучший ответ

Просто придерживайтесь обычного селектора идентификаторов:

$('#element');

Он по-прежнему самый быстрый, даже если у вас уже выбран родительский элемент: http://jsperf.com/id- тест - 123

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

1
Blender 23 Янв 2013 в 08:53

Если вы находите элемент по идентификатору, тогда используйте просто:

var $element = $('#id');

Без предоставления контекста для поиска всегда будет самый быстрый путь.

Аналогично, здесь, где вы предоставляете идентификатор в качестве контекста для поиска, "#parent" - самый быстрый селектор. Вы можете теоретически использовать "#overParent > #parent" для достижения того, что вы имеете в виду, но на самом деле это будет означать больше работы и будет медленнее.

2
rsp 23 Янв 2013 в 08:49

@Blender

Если вы используете классы и кэшируете элемент контекста, он быстрее предоставляет контекст:

http://jsperf.com/id-test-123/3

1
Edward Olamisan 7 Фев 2013 в 15:37