Я выбираю HTML-элементы

var elements = $('*[my-elem="false"]');

Так как каждый элемент имеет атрибут id с некоторым значением, которое я хочу внутри итерации получить идентификатор текущего итерированного элемента, поэтому я попытался

$.each(elements, function(index, item){
    var itemId = item.attr("id").val();        
});

Но я получаю следующую ошибку

TypeError: item.attr is not a function
2
user1765862 17 Дек 2015 в 17:40

7 ответов

Лучший ответ

Попробуйте console.log(item). Вы должны увидеть, что это обычный элемент HTML, а не объект jQuery.

Обратите внимание, что .val() относится конкретно к атрибуту value элемента.

Обе они помнят: если ваша цель - получить идентификатор, вы можете использовать item.id, this.id или $(item).attr("id").

7
RobertAKARobin 17 Дек 2015 в 14:47

.attr - это метод jQuery, поэтому вам нужно использовать свой элемент, как если бы он был селектором jQuery. Кроме того, вам не нужно .val для .attr('id'), так что это должно работать

var itemId = $(item).attr("id");
1
Andrew Brooke 17 Дек 2015 в 14:42

Вы используете неправильную версию each при циклическом просмотре элементов DOM. Используйте это. (https://api.jquery.com/each/)

elements.each(function(index){
  var itemId = $(this).attr('id').val();
});
0
Robbert 17 Дек 2015 в 14:45

Пытаться

var elements = $('selector');
elements.each(function() {
    alert($(this).attr('id'));
});
0
Andrew Brooke 17 Дек 2015 в 14:51

Это так же просто, как

var itemId = item.id;
1
Yehuda Schwartz 17 Дек 2015 в 14:49

item является элементом DOM, attr является функцией jQuery, поэтому вам просто нужно обернуть его в нотацию jQuery var itemId = $(item).attr('id').val();

0
allicarn 17 Дек 2015 в 14:42
var itemId = this.id; 

Также будет работать

0
Stew Sheen 20 Дек 2015 в 00:06