jQuery .each () возвращает элемент DOM, а не объект jQuery - PullRequest
36 голосов
/ 09 июня 2010

Я могу неправильно понять, что происходит, но из того, что я могу сказать, я получаю элемент 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()?

Ответы [ 2 ]

40 голосов
/ 09 июня 2010

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

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

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

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

5 голосов
/ 16 августа 2010

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

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

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

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

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

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

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

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

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

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

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

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