如何用$变换$ a中的“a”

问题描述 投票:0回答:2

我试图用函数替换函数中的字母“a”。例如,改变这个:

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

对此:

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

问题是= $( '.'+thisClass );工作正常,但var $(thisClass)没有。我尝试了一些变化,包括:var $thisClassvar $('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 );
javascript jquery variables dollar-sign
2个回答
1
投票

你的问题在于范围。在您发布的代码中,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对象。当用作变量名称的一部分时,美元符号没有意义。


1
投票

只要您知道父对象,就可以通过属性名称访问它。

在您的情况下,看起来您的变量在全局范围内,因此您可以尝试从window对象访问它:

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

如果你在setInterval函数中只需要这个变量,你可以使用this而不是window

var thisClass = 'a';
setInterval(function(){         
    this['$' + thisClass] = $( '.'+thisClass );  
});
© www.soinside.com 2019 - 2024. All rights reserved.