0

我有一个像这样使用的变量 d:

$(function() {  
    for(i = 1; i <= 31; i++) {
        var d = '#days' + i;    
        if ($(d).attr("id").substr(4,2) == 11) {
            $(d).addClass("date_has_event");
            //console.log("diez");
        } else {
            console.log("otro");
        }
    }
}

但是我在萤火虫中收到以下错误:

$(d).attr("id") 未定义
index.html (L23) (?)()()
jquery.min.js (L27) onreadystatechange()()
jquery.min.js (L27) onreadystatechange()()
jquery.min.js (L21) nodeName()([function(), function()], function(), undefined)
onreadystatechange()()

我真的不明白为什么。有人知道吗?


编辑

对于我不得不运行的糟糕的解释,我很抱歉,这里的情况会更详细一些。我正在使用 javascript 生成日历。每个 td 都有不同的 id(因此是#days + i),我从 1 到 31 运行它,这样我可以覆盖更长的月份。但是我收到了上面提到的错误。我还使用 jQuery 库让我能够更轻松地选择(即,而不是 getElementById 只是#days)

4

4 回答 4

8

为什么不检查 if i == 11,然后对其进行处理?它仍然只会开火$('#days11')。编辑:如果您需要确保元素也存在,只需将其添加到条件中即可。

$(function(){   
    for(i = 1; i <= 31; i++){
        var d = '#days' + i;    

//       if($(d) && i == 11){            
         if(i == 11){
               $(d).addClass("date_has_event");
               //console.log("diez");
         }else{
               console.log("otro");
         }
    }
}
于 2009-04-02T14:49:28.830 回答
3

好的,新的答案。你这样做的方式不是很“jqueryish”。让我们退后一点。据我所知,你有一个类似的 html 结构:

<div id="days1"></div>
<div id="days2"></div>
...

然后,您要对具有 days(num) id 的每个项目运行此操作?一个更好的解决方案是,如果你想为每个带有日期的元素添加一个类,首先应用一个类:

<div class="days"></div>
<div class="days"></div>

然后您的代码可以是

$(function(){
    $(".days").each(function(i){
        if($(this).substr(4,2) == 11){
            $(this).addClass("date_has_event");
        }
    });  
});
于 2009-04-02T14:49:34.773 回答
1

由于您是按 id 选择的,因此这是多余的:

if ($(d).attr("id").substr(4,2) == 11)

因为 d 的 ID 属性d。

最简单的做法:

if (i == 11)
于 2009-04-02T14:58:11.960 回答
0

缺少右括号?

$(function() {  
    for(i = 1; i <= 31; i++) {
        var d = '#days' + i;    
        if (i == 11) {
            $(d).addClass("date_has_event");
            //console.log("diez");
        } else {
            console.log("otro");
        }
    }
// shouldn't the next line be });
}
于 2009-04-02T15:09:14.383 回答