Javascript “如何替换”;a「;以$a为单位,带变量
我试图用一个变量替换函数中的字母“a”。例如,更改此选项:Javascript “如何替换”;a「;以$a为单位,带变量,javascript,jquery,variables,dollar-sign,Javascript,Jquery,Variables,Dollar Sign,我试图用一个变量替换函数中的字母“a”。例如,更改此选项: setInterval(function(){ var $a = $( '.a' ); }); 为此: var thisClass = 'a'; setInterval(function(){ var $(thisClass) = $( '.'+thisClass ); }); 问题是,=$('.'+this类)工作正常,但var$(thisClass)不行。我尝试了一些变体
setInterval(function(){
var $a = $( '.a' );
});
为此:
var thisClass = 'a';
setInterval(function(){
var $(thisClass) = $( '.'+thisClass );
});
问题是,=$('.'+this类)代码>工作正常,但var$(thisClass)
不行。我尝试了一些变体,包括:var$thisClass
和var$('thisClass')
,但都不起作用
是否可以在$a
中插入/注入一个变量来代替“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 );
只要知道父对象,就可以通过属性名访问它
在您的情况下,您的变量似乎在全局范围内,因此您可以尝试从窗口
对象访问它:
var thisClass = 'a';
setInterval(function(){
window['$' + thisClass] = $( '.'+thisClass );
});
如果在setInterval
函数中只需要此变量,则可以使用this
而不是窗口
:
var thisClass = 'a';
setInterval(function(){
this['$' + thisClass] = $( '.'+thisClass );
});
只要知道父对象,就可以通过属性名访问它
在您的情况下,您的变量似乎在全局范围内,因此您可以尝试从窗口
对象访问它:
var thisClass = 'a';
setInterval(function(){
window['$' + thisClass] = $( '.'+thisClass );
});
如果在setInterval
函数中只需要此变量,则可以使用this
而不是窗口
:
var thisClass = 'a';
setInterval(function(){
this['$' + thisClass] = $( '.'+thisClass );
});
你的问题在于范围。在您发布的代码中,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对象。美元符号用作变量名的一部分时没有意义。您的问题在于作用域。在您发布的代码中,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对象。美元符号作为变量名的一部分时没有意义。不清除它就调用setInterval
会使其中的代码无休止地循环运行为什么你的代码依赖于变量的特定名称?嗨@Blender,我不确定我是否理解你的问题,但如果它澄清了,我的实际项目将使用一个更复杂的类似功能的许多副本。我试图想出一个简单的方法,不必改变函数中多次使用的类名引用,我只想保持大部分代码不变,并使用var=
将所有默认类名切换为唯一的类名。类似于'var uniqueClassName=defaultclassreferencesindefunction;`这样可以在编码时节省我一些时间。@forestkelley:为什么不能执行var$a=$('..+thisClass)
然后在你的函数体中使用$a
?@Blender,我刚刚用我当前的较长代码更新了我的帖子。我想,在某种程度上,我已经基本上完成了你建议的var classVar='a'代码>而不是var$a=$('..'+thisClass)
。不清除它就调用setInterval
,会使其中的代码无休止地循环运行。为什么您的代码会依赖于变量的特定名称?嗨@Blender,我不确定我是否理解您的问题,但如果问题得到澄清,我的实际项目将使用更复杂的类似函数的多个副本。我试图想出一个简单的方法,不必改变函数中多次使用的类名引用,我只想保持大部分代码不变,并使用var=
将所有默认类名切换为唯一的类名。类似于'var uniqueClassName=defaultclassreferencesindefunction;`这样可以在编码时节省我一些时间。@forestkelley:为什么不能执行var$a=$('..+thisClass)
然后在你的函数体中使用$a
?@Blender,我刚刚用我当前的较长代码更新了我的帖子。我想,在某种程度上,我已经基本上完成了你建议的var classVar='a'代码>而不是var$a=$('..'+thisClass)代码>。当我用这个['$'+thisClass]
或窗口['$'+thisClass]
替换$a
时,它似乎对我不起作用。我可能需要研究这些内容以了解您的建议。当我用这个['$'+thisClass]
或窗口['$'+thisClass]
替换$a
时,它似乎对我不起作用。我可能需要研究这些来了解更多关于你的建议。太棒了!我正在考虑回拨,这是一个很好的解决方案。这比我想做的更有效率。谢谢我没有意识到我的var classVar='a'
将超出函数延迟的范围。太棒了!我正在考虑回拨,这是一个很好的解决方案。这比我想做的更有效率。谢谢我没有意识到我的var classVar='a'代码>将不在函数延迟的范围内。