Как заменить "a" в $a переменной

Я пытаюсь заменить букву "а" в функции с переменной. Например, измените это:

setInterval(function(){         
    var $a = $( '.a' ); 
});

к этому:

var thisClass = 'a';
setInterval(function(){         
    var $(thisClass) = $( '.'+thisClass );  
});

Проблема в том, что = $( '.'+thisClass ); работает просто отлично, но var $(thisClass) не делает. Я пробовал несколько вариантов, в том числе: var $thisClass а также var $('thisClass') но никто не работает.

Можно ли вставить / ввести переменную вместо "а" в $a?

ОБНОВИТЬ:

Ниже приведено текущее состояние моего фактического кода. Я понял, что я мог бы просто заменить $a с $( '.a' ) которая решает некоторые мои проблемы с попыткой использовать var заменить все имена классов, используемые в моей функции сразу. Но я все еще остаюсь с getElementById("a") в конце, который не будет работать, если я использую, например, getElementById("classVar") или же getElementById(classVar) вместо.

    setTimeout(function(){
        var classVar = 'a'; 
        $('.'+classVar).makisu( 'toggle' );
            $('.'+classVar).makisu({ 
                selector: 'dd',
                overlap: Math.random() * (.7 - .2) + .2,
                speed: Math.random() * (3 - .2) + .2
            });
    }, document.getElementById("a").childElementCount*universalBoxTime );

2 ответа

Решение

Ваша проблема с областью. В коде, который вы опубликовали, classVar существует только внутри setTimeout обратный вызов и не может быть использован снаружи. В JavaScript вы можете создавать функции, которые создают и вызывают другие функции, поэтому вы можете сделать свой код более универсальным следующим образом:

function do_the_thing($elements) {
    var delay = $elements.children().length * universalBoxTime;

    setTimeout(function() {
        $elements.makisu('toggle');
        $elements.makisu({ 
            selector: 'dd',
            overlap: Math.random() * (.7 - .2) + .2,
            speed: Math.random() * (3 - .2) + .2
        });
    }, delay);
}

do_the_thing($('.a'));
do_the_thing($('.b'));

я использовал $elements вместо elements просто чтобы было очевидно, что $elements является объектом jQuery Знак доллара не имеет значения, когда используется как часть имени переменной.

Вы можете получить к нему доступ по имени свойства, если вы знаете родительский объект.

В вашем случае, похоже, что ваша переменная находится в глобальной области видимости, поэтому вы можете попытаться получить к ней доступ из window объект:

var thisClass = 'a';
setInterval(function(){         
    window['$' + thisClass] = $( '.'+thisClass );  
});

Если вам нужна только эта переменная внутри вашего setInterval функция, которую вы можете использовать this вместо window:

var thisClass = 'a';
setInterval(function(){         
    this['$' + thisClass] = $( '.'+thisClass );  
});
Другие вопросы по тегам