jQuery .each () возвращает элемент DOM и не объект jQuery

Я мог неправильно понимать то, что происходит, но от того, что я могу сказать, что получаю элемент DOM и не объект jQuery, когда я использую .each().

Ниже не будет работать как this обращается к элементу DOM и не объекту jQuery

$("span[id$='_TotalItemCost']").each(function() {
    var someText = this.text();
});

Измененный для преобразования this к объекту jQuery и все хорошо

$("span[id$='_TotalItemCost']").each(function() {
    var someText = $(this).text();
});

Действительно ли там что-то броско с моим селектором? JQuery .each() документация неправильно и это не объект jQuery, а скорее элемент DOM, возвращенный .each()?

36
задан Nick Craver 16 August 2010 в 10:51
поделиться

2 ответа

В документации нет ничего неправильного, но вы можете неправильно понять, что такое объект jQuery.

Объект jQuery возвращается функцией $ () . Итак, $ ("span [id $ = '_ TotalItemCost']") - это один объект jQuery, который содержит каждый выбранный элемент span.

Использование .each () будет перебирать элементы, содержащиеся в объекте jQuery. Вот почему это узел DOM, а не объект jQuery.

Вы поступили правильно, применив $ (this) для использования методов jQuery для этого конкретного элемента.

40
ответ дан 27 November 2019 в 06:09
поделиться

@Vincent Robert, вы в значительной степени прекрасно это резюмировали, но позвольте мне немного расширить это.

хотя JQuery - это функция, прототипы которой расширяют ее корневой экземпляр, она действует больше как объект.

Если вы отделите объекты от методов / функций и посмотрите на них по отдельности, вы поймете, как построен интерфейс jQuery.

Я считаю $ () объектом, а each () - методом. вы инициализируете объект с помощью «селектора» jQuery $ () , который, в свою очередь, возвращает объекты, содержащие только элементы / данные, выбранные вами в селекторе $ () .

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

поскольку ваш OP основан на каждой функции, вы не должны получать там объект jquery, потому что каждый из них не предназначен специально для узлов и элементов как таковых

, например, вы хотите, чтобы здесь был объект jquery?

$({a:'1',b:'2'}).each(function(){
});

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

Также, когда я говорю «объект», я говорю не об объектах json как таковых, а об объектах метода / прототипирования.

Надеюсь, это поможет.

5
ответ дан 27 November 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: