我试图用函数替换函数中的字母“a”。例如,改变这个:
setInterval(function(){
var $a = $( '.a' );
});
对此:
var thisClass = 'a';
setInterval(function(){
var $(thisClass) = $( '.'+thisClass );
});
问题是= $( '.'+thisClass );
工作正常,但var $(thisClass)
没有。我尝试了一些变化,包括:var $thisClass
和var $('thisClass')
但没有工作。
是否可以在$a
中插入/注入变量来代替“a”?
更新:
下面是我实际代码的当前状态。我确实意识到我可以简单地用$a
替换$( '.a' )
,这解决了我尝试使用var
立即替换我函数中使用的所有classNames的一些问题。但是我仍然在最后留下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 );
你的问题在于范围。在您发布的代码中,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 );
});