Jeśli chcesz mieć to naprawdę szybko, powinieneś użyć rodzimych przeglądarek. Nowoczesne przeglądarki obsługują querySelector
[docs]:
var $result;
if(element.querySelector) {
$result = $(element.querySelector('.x'));
}
else {
$result = $(element).find('.x').first();
}
Użycie jest nieco ograniczona, gdyż działa tylko jeśli element
jest pojedynczym elementem, a jeśli przełącznik jest poprawny selektor CSS. Możesz zrobić z tego wtyczkę. Ale wtedy, jeśli weźmiesz pod uwagę wszystkie przypadki, takie jak wiele elementów itd., Prawdopodobnie nie ma już żadnej przewagi.
Tak więc, jeśli masz bardzo konkretny przypadek użycia, może to być przydatne, jeśli nie, trzymać się jQuery.
Aktualizacja: Okazuje się, dzięki czemu wtyczki jest jeszcze szybsze: 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));
Jak to działa:
The iteracje wtyczek ponad wybranych elementów DOM i wzywa querySelector
na każdym z nich. Po znalezieniu elementu pętla zakończy się i zwróci znaleziony element. Istnieją dwa powody, może wystąpić wyjątek:
- przeglądarek nie obsługuje
querySelector
- Selektor nie jest czystym selektor CSS
W obu przypadkach wtyczki spadnie z powrotem do korzystania normalny Metoda jQuery.
@Konerak Powiedz mi ... Zadałem pytanie. – daGrevis
Czy istnieje powód, dla którego należy ją zoptymalizować? Czy obecnie trwa to * długo *? –
Uważam, że jest to mała optymalizacja ... ale jeśli mam świetne miejsce, gdzie można zapytać "jak to jest" ... dlaczego nie zoptymalizować? – daGrevis