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()
?
Ответы
Ответ 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 как таковых, но методы/прототипы объектов.
Надеюсь, что это поможет.