Почему это недействительный код?

У меня есть этот кусок кода в моем файле JavaScript (я работаю с YUI):

var levels = [2, 3, 4, 5, 6, 7, 8, 9];

for(var i = 0; i < levels.length; i++) {
var level = levels[i];
    Y.all(".level"+level).get('parentNode').addClass("category_level"+level);  
};

Теперь, если у меня есть это право в конце моего файла JavaScript, он работает нормально. Однако, если у меня есть это впереди другого кода, ни один из моих других кодов (функций) больше не работает.

Далее я выделил проблему для этого фрагмента кода: .get ('parentNode') - когда я убираю этот бит, весь другой код и функции снова работают.

Я не уверен, но я думаю, что мне может понадобиться что-то вроде:

var nodes = Y.all(".level"+level);

nodes.each(function(node){  ...
    node.get('parentNode').......

но я изо всех сил пытаюсь применить это к моему куску кода наверху.

Спасибо!

ОБНОВИТЬ

Этот кусок кода недействителен по некоторым причинам:

var levels = [2, 3, 4, 5, 6, 7, 8, 9];

for(var i = 0; i < levels.length; i++) {
   var level = levels[i];
   Y.all(".level"+level).get('parentNode').addClass("category_level"+level);  
};

Когда я вставляю это в http://www.jslint.com/ это настолько неправильно, что он даже не может отсканировать это! "Ошибка синтаксиса JavaScript и не может продолжать надежно анализировать программу"

Что такого плохого в этом куске кода? Он говорит: "Переместить объявления var в начало функции", но когда я это делаю, он снова говорит то же самое.

Может быть, кто-нибудь скажет мне, что не так с этим фрагментом кода. Или, может быть, это слишком сложно или плохо и должно быть сделано более простым способом?

Спасибо!

1 ответ

Решение

Я не уверен, как выглядит ваш HTML, но если вы пытаетесь добавить имя класса для каждого уровня, я бы использовал Y.each а также Y.one вот так:

var levels = [2, 3, 4, 5, 6, 7, 8, 9];

Y.each(levels, function (level) {
    var node = Y.one(".level"+level);
    if(node) {
        node.get('parentNode').addClass('category_level' + level);
    }
});

Это будет проходить через линтер, а не потерпит неудачу, если Y.one('.level199') не существует.

Это будет работать для нескольких узлов уровня:

var levels = [2, 3, 4, 5, 6, 7, 8, 9];

Y.each(levels, function (level) {
    Y.all(".level"+level).each(function (node) {
        node.get('parentNode').addClass('category_level' + level);
    });
});
Другие вопросы по тегам