Разделенный запятыми список селекторов? - PullRequest
20 голосов
/ 11 ноября 2011

В настоящий момент я выполняю рефакторинг некоторого кода и наткнулся на селектор:

jQuery("tr","#ctl00_MainContent_MyUserControl").each(function(i,row) { ... }

Похоже, что он выбирает <tr> из пользовательского элемента управления на странице (игнорируйте тот факт, что экземпляр полностью назван!), Но это не синтаксис, с которым я знаком и не могу найти ничего в документация. Я ожидаю, что это будет написано:

$("#ctl00_MainContent_MyUserControl tr").each(function(i,row) { ... }

Может кто-нибудь сказать мне, если есть разница (тонкая или нет), что я здесь скучаю ??

Ответы [ 4 ]

16 голосов
/ 11 ноября 2011

Этот селектор выбирает все элементы tr внутри элемента с идентификатором ctl00_MainContent_MyUserControl. Это точно так же, как ваш второй пример.

Второй параметр предоставляет контекст для первого параметра. Для этого синтаксиса есть лучшие варианты использования, например:

function(el) {
    $('tr', el).each(...);
}

Где el - это какой-то элемент на вашей странице. В этом случае вы не можете использовать вторую синтаксическую форму.

14 голосов
/ 11 ноября 2011

Вызов метода jQuery() с двумя аргументами (selector и context) эквивалентен jQuery(context).find(selector).Таким образом:

jQuery("tr","#ctl00_MainContent_MyUserControl");

равно:

jQuery("#ctl00_MainContent_MyUserControl").find("tr");

, что также совпадает с:

jQuery("#ctl00_MainContent_MyUserControl tr");

Мое личное мнение таково, что использование context имеет смысл только тогда, когда вы можете передать уже выбранный элемент (jQuery или DOM), не так много, когда вы просто передаете селектор (String).В этом случае я просто предпочитаю имитировать селектор CSS: например, #ctl00_MainContent_MyUserControl tr.

3 голосов
/ 11 ноября 2011

Это точно так же. Также могло быть написано:

$("#ctl00_MainContent_MyUserControl").find("tr").each(function(i,row) { ... }

Синтаксис первого можно увидеть в документации jQuery для конструктора . По сути, это «найти все элементы, которые соответствуют первому селектору, это потомок второго, соответствующего второму».

2 голосов
/ 11 ноября 2011

Второй аргумент конструктора jQuery (когда первый является селектором) - это context .

Из документов API

context Элемент DOM, Document или jQuery для использования в качестве контекста

См. http://api.jquery.com/jQuery/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...