Синтаксис селектора jquery $ ([]) и $ ("*") - PullRequest
6 голосов
/ 30 января 2012

Следующая строка кода взята из официального диалога / # модальной формы

allFields = $( [] ).add( name )

Может кто-нибудь уточнить, что делает $( [] )? Это так же, как $("*")?

Другая вещь, которая меня озадачила, это то, что я не видел, чтобы allFields добавлялся / добавлялся куда-либо / к любому объекту, он только создавался и изменялся. Я что-то упустил?

Ответы [ 4 ]

5 голосов
/ 30 января 2012

$([]) создает пустой объект jQuery, как и $().$('*') создает объект jQuery, который содержит все элементы, соответствующие селектору CSS *, которому будет соответствовать каждый элемент.

Другими словами, $([]) ничего не получает, $('*') получает все.

3 голосов
/ 30 января 2012

Если вы посмотрите на документ для функции jQuery() - обычно ее называют сокращенной версией $() - вы увидите, что она принимает несколько различных типов и комбинаций параметров.

Синтаксис, о котором вы спрашивали:

$([])

- это синтаксис jQuery( elementArray ), который позволяет передавать массив элементов DOM, где возвращаемым будет объект jQuery, оборачивающий эти элементы. Пропустив пустой массив, вы в основном получаете пустой объект jQuery (так же, как если бы вы передавали строку селектора, которая ничего не соответствовала, но без неэффективности попытки сначала найти совпадение).

При создании allFields к нему добавляются три элемента DOM (где name, email и password создаются непосредственно перед этим как объекты jQuery, содержащие по одному элементу DOM каждый):

allFields = $( [] ).add( name ).add( email ).add( password )

Предположительно преимущество добавления отдельных предметов, а не просто выполнения:

allFields = $("#name,#email,#password")

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

Другая вещь, которая меня озадачила, это то, что я не видел, чтобы allFields добавлялся / добавлялся к чему-либо / любому объекту, он только создается и изменяется, я что-то упустил?

Это упоминается в двух других местах кода:

allFields.removeClass( "ui-state-error" );
// and, later
allFields.val( "" ).removeClass( "ui-state-error" );

Это довольно стандартное использование jQuery для удаления класса или установки значения всех элементов в объекте jQuery. Нет необходимости добавлять его к другому объекту.

1 голос
/ 30 января 2012

Похоже, вы ссылаетесь на следующие строки:

var name = $( "#name" ),
    email = $( "#email" ),
    password = $( "#password" ),
    allFields = $( [] ).add( name ).add( email ).add( password )

Здесь происходит то, что они выбрали три элемента и теперь они хотят создать один объект jQuery, который ссылается на все три.

Это то же самое, что и ниже, за исключением того, что они избегали вызовов селектора:

   allFields = $("#name, #email, #password")

По сути, они создали объект jQuery с нулевым элементом, добавив $([]), затем name, email ипароль, поэтому конечным объектом был объект jQuery длиной 3.

1 голос
/ 30 января 2012

jQuery (elementArray)

elementArray: Массив, содержащий набор элементов DOM для переноса в jQuery объект.

$( [] ) создать пустое множество, обернутое в объект jQuery.

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