Если вы хотите, чтобы это было очень быстро, вы должны использовать нативные методы браузера. Современные браузеры поддерживают querySelector
[документы] :
var $result;
if(element.querySelector) {
$result = $(element.querySelector('.x'));
}
else {
$result = $(element).find('.x').first();
}
Использование немного ограничено, так как оно будет работать, только если element
является единственным элементом и если селектор является допустимым селектором CSS. Вы могли бы сделать плагин из этого. Но тогда, если вы рассмотрите все случаи, например, несколько элементов и т. Д., Вы, вероятно, больше не будете иметь никаких преимуществ.
Итак, еще раз, если у вас очень специфический вариант использования, это может быть полезно, если нет, придерживайтесь jQuery.
Обновление: Получается, что плагин все еще работает быстрее: jsPerf benchmark
(function($) {
$.fn.findOne = function(selector) {
try {
var element, i = 0, l = this.length;
while(i < l && (element = this[i].querySelector(selector)) === null) {
i++;
}
return $(element);
}
catch(e) {
return this.find(selector).first();
}
};
}(jQuery));
Как это работает:
Плагин перебирает выбранные элементы DOM и вызывает querySelector
для каждого из них. Как только элемент найден, цикл завершается и возвращает найденный элемент. Есть две причины, по которым может возникнуть исключение:
- Браузеры не поддерживают
querySelector
- Селектор не является чистым селектором CSS
В обоих случаях плагин будет использовать обычный метод jQuery.