【问题标题】:Uncaught TypeError: Object #<HTMLDivElement> has no method 'attr'未捕获的类型错误:对象 #<HTMLDivElement> 没有方法“attr”
【发布时间】:2012-11-24 00:57:17
【问题描述】:

我正在尝试使用类工具提示来获取我的 div。

然后做这样的事情:

var schemes = $(".tooltip");

for (var i in schemes) {
    var scheme = schemes[i];
    console.log(scheme.attr("cost"));
}

但它会引发上述错误。我错过了什么? (我显然是 javascript + jquery 的新手)

【问题讨论】:

  • .attr() 仅存在于 jquery 对象上,而不存在于 DOM 对象上。 schemes[i] 获取一个 DOM 对象。而且,永远不要使用for x in obj 来迭代数组。它迭代所有属性,而不仅仅是数组元素。使用.eq(i) 获取jquery 对象。

标签: javascript jquery


【解决方案1】:

如果你使用for-loop 来迭代jQuery 集合,你应该使用eq() 方法获取元素,但不能使用方括号表示法(即[])。 $(".tooltip")[i] 之类的代码会拾取 DOM 元素,但 不是 jQuery 对象。

var schemes = $(".tooltip");
for (var i = 0; i < schemes.length; i++) {
    var scheme = schemes.eq(i);
    console.log(scheme.attr("cost"));
}

但是,您可以始终使用each() 来迭代 jQuery 集:

$(".tooltip").each(function() {
    var scheme = $(this);
    console.log(scheme.attr("cost"));
});

【讨论】:

    【解决方案2】:
    var schemes = $(".tooltip");
    
    schemes.each(function(index, elem) {
        console.log($(elem).attr('cost'));
    });
    

    作为旁注,据我所知,“成本”不是任何元素的有效属性,您可能应该使用数据属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多