$ (d) .attr ("id") - неопределенный JavaScript - PullRequest
0 голосов
/ 02 апреля 2009

У меня есть переменная 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. каждый тд имеет свой идентификатор (отсюда #days + i), и я запускаю его с 1 по 31, чтобы я мог охватить более длительные месяцы. Однако я получаю ошибку, которую я упомянул выше. Я также использую библиотеку jQuery, чтобы мне было легче выбирать (т.е. вместо getElementById просто #days)

Ответы [ 4 ]

8 голосов
/ 02 апреля 2009

Почему бы просто не проверить, если 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");
         }
    }
}
3 голосов
/ 02 апреля 2009

Хорошо, новый ответ. То, как вы делаете это, не очень «jqueryish». давайте сделаем шаг назад немного. из того, что я могу сказать, у вас есть структура HTML что-то вроде:

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

Затем вы запускаете это для каждого элемента с идентификатором дней (номер)? Лучшее решение: если вы хотите добавить класс к каждому элементу с датой, сначала примените класс:

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

Ваш код может быть

$(function(){
    $(".days").each(function(i){
        if($(this).substr(4,2) == 11){
            $(this).addClass("date_has_event");
        }
    });  
});
1 голос
/ 02 апреля 2009

Поскольку вы выбираете по id, это избыточно:

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

потому что атрибут ID d равен d.

Наиболее просто сделать:

if (i == 11)
0 голосов
/ 02 апреля 2009

Отсутствует закрывающая скобка?

$(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 });
}
...