我有一个我使用的变量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");
}
}
}
但是我在firebug中遇到以下错误:
$(d).attr("id") is undefined 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)
答案 0 :(得分:8)
为什么不检查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");
}
}
}
答案 1 :(得分: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");
}
});
});
答案 2 :(得分:1)
由于您是按ID选择的,因此这是多余的:
if ($(d).attr("id").substr(4,2) == 11)
因为d 的ID属性是 d。
最简单的事情是:
if (i == 11)
答案 3 :(得分: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 });
}