jQuery найти разницу между $ .find (‘селектор’) и $ (‘селектор’)

#jquery #find #css-selectors

#jquery #Найти #css-селекторы

Вопрос:

У меня вопрос, почему эти два фрагмента кода отличаются.

 $('#ctl00_DDMenu1_HyperLink1')  
//jQuery(a#ctl00_DDMenu1_HyperLink1 Default.aspx) Console output
$('#ctl00_DDMenu1_HyperLink1').text()
  

Приведенный выше код возвращает : Some link text

Но

 $.find('#ctl00_DDMenu1_HyperLink1')  
//[a#ctl00_DDMenu1_HyperLink1 Default.aspx] Consolee output
$.find('#ctl00_DDMenu1_HyperLink1').text()
  

ВОЗВРАТ

Ошибка типа: $.find("#ctl00_DDMenu1_HyperLink1").text не является функцией

Означает ли это, что $.find возвращаемый объект массива [] и функции jQuery недоступны?

//РЕДАКТИРОВАТЬ

Я использовал jQuery 1.4.2 и консоль Firebug.

//Ответ найден практикой

Этот код вернет ссылку на объект jQuery, и все функции jQuery будут доступны.

$('any_selector')
//jQuery(item1),jQuery(item2),...,jQuery(item-N) Console output
$('any_selector').text()

Этот код возвращает объект массива JavaScript, поэтому любая функция jQuery не может быть применена к результирующему набору. Даже когда результирующий набор кажется идентичным.

$.find('any_selector')
//[item1,item2,...,item-N] Consolee output
$.find('any_selector').text()

Но мы можем сделать трюк (странный трюк), чтобы обернуть массив js в jQuery selector:

$($.find('any_selector_as_inner_select')).val()

// Спасибо за помощь, ребята!

Комментарии:

1. Вы не должны использовать .find() для поиска элементов с определенным атрибутом id. Идентификатор должен быть уникальным для каждого элемента. Если вы хотите проверить наличие определенного суффикса или префикса, то вы можете это сделать.

2. Это просто пример различия между функциями в том, как они работают. В любом случае спасибо за помощь 🙂

Ответ №1:

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

 $('#aParticularForm').find('input') 
  

Он не может быть вызван сам по себе.

Комментарии:

1. Я думаю, что это может быть вызвано само по себе, но это кажется странным: $($.find('#aParticularForm input)).val()

2. @r.piesnikowski о, интересно, я не знал об этом! Спасибо за предупреждение.

3. функция $.find() возвращает массив совпадающих объектов JavaScript, поэтому любая функция jQuery не может быть доступна в чистом JS-объекте. Но перенос этих объектов JS внутрь $ () влияет на хороший результат. Ура!

4. Интересно то, что $($.find('#foo')).text() и $('#something').find('#foo').text() оба будут работать, но $.find('#foo').text() не будут.