`attr('id')`在我的`each()`函数中失败了

时间:2011-11-10 15:45:30

标签: jquery

的jQuery

var myID = new Array("A1","B2");
$.each($(".tab"), function(index,value) {

var id = value.attr('id'); //error here :(

if(id == myID[index])
id.addClass('sel');

}

HTML

<div class="tab" id="A1"></div>
<div class="tab" id="A2"></div>
<div class="tab" id="A3"></div>

<div class="tab" id="B1"></div>
<div class="tab" id="B2"></div>
<div class="tab" id="B3"></div>

我想在这里实现的是,我想将类添加到与数组myID匹配的html中。我上面的代码在行var id = value.attr('id');上引发了错误。

任何人都可以帮我解决这个问题吗?

7 个答案:

答案 0 :(得分:4)

您可以使用$.fn.each代替$.each - 任何一个都可以让您使用this关键字或第二个参数(value)来引用DOM元素

var myID = new Array("A1","B2");
$(".tab").each( function(index, value) {
    this == value; //true
    var id = this.id; //Property access is faster than attr or prop

    if(id == myID[index])
        $(this).addClass('sel'); //addClass gets called on a jQuery object, not a string

});

或者,您可以迭代数组并直接添加类:

var myID = ["A1", "B2"]; //or new Array(...);
$.each(myID, function(index, value) {
    $("#"+value).addClass("sel");
});

答案 1 :(得分:3)

$.each遍历jQuery对象的数字属性,这些属性实际上是纯DOM元素。将其更改为

var id = value.id;

并使用

$(value).addClass('sel');

添加课程。

答案 2 :(得分:1)

所有其他答案都未能解决另一个问题id.addClass('sel');

id将是一种原始类型,因此不会有addClass方法。

var myID = new Array("A1","B2");
$.each($(".tab"), function(index,value)
{
    var id = $(value).attr('id'); //change here
    if(id == myID[index])
        $(value).addClass('sel'); //also, a change here
}

答案 3 :(得分:0)

var myID = new Array("A1","B2");
$.each($(".tab"), function(index,value) {

var id = $(this).attr('id');

if(id == myID[index]){
      id.addClass('sel');
}
}

答案 4 :(得分:0)

var id = value.attr('id'); //error here :(

应该是

var id = $(value).attr('id'); //error here :(

答案 5 :(得分:0)

您的错误来自于在jquery包装器中没有忽略“value”。

id = $(value).attr ("id");

或者您可以绕过jquery并执行:

 id = value.id;

使用jquery添加一个类需要:

$(value).addClass("sel");

答案 6 :(得分:0)

或者你可能只是做

var myID = new Array("A1","B2");
for (var id in myID) {
  $("#" + id).addClass("sel");
}