Подтвердить что ты не робот

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() documentation неправильным и не является объектом jQuery, а скорее элементом DOM, возвращаемым .each()?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

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

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

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

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