2012-04-03 4 views
7

Что такое jQuery-эквивалент querySelector? Единственный способ я нашел до сих пор, чтобы выбрать все затем выбрать первый выбор:jQuery эквивалент запросаSelector

$(selectorString)[0] 

С выше выражения, является JQuery достаточно умны, чтобы остановить после нахождения первого матча?

Обновление: @Mutnowski предлагает использовать eq() и сначала, но после чтения документации jQuery эти два метода, похоже, имеют тот же недостаток: jQuery сначала получит все совпадения, а затем отфильтрует первый элемент.

+0

к сведению, что «эк» не является селектор CSS, это реализация JQuery. Так что для лучшей производительности лучше писать '$ (" td "). Eq (2)' вместо '$ (" td: eq (2) ")' – Killy

ответ

1

Таким образом, кажется, что нет никакого эквивалента querySelector в jQuery, или i n других библиотек, на которые я смотрел.

Обходной путь состоит в том, чтобы выбрать все соответствующие элементы (что эквивалентно запросуSelectorAll), а затем отфильтровать первый. Это можно сделать, используя [0] (возвращает узел html) или, как было предложено @Mutnowski с eq (0) или первым (возвращает объект jQuery).

6

Вы хотите .eq (индекс), чтобы получить такой индекс

$("td").eq(2) 
$("td:eq(2)") 

http://api.jquery.com/eq/

Если вы хотите только первое использование .first()

$("tr").first() 
$("tr:first") 

http://api.jquery.com/first/

+0

Thx. Мне все же кажется, что jQuery сначала выбирает все совпадения, и только затем применяет фильтр. Верный? – Christophe

+0

@ Кристофе: Правильно. – BoltClock

0

вы можете написать простой плагин (compatibility notes)

$.fn.firstMatch = function(sel) { 
    var len = this.length; 
    if (!len) return this; 
    for(var i = 0; i < len; i++){ 
     var match = this[i].querySelector(sel); 
     if (match) return $(match); 
    } 
    return $(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^