【问题标题】:How Replace "a" in $a with Variable如何用变量替换 $a 中的“a”
【发布时间】:2018-05-31 08:40:54
【问题描述】:

我正在尝试用变量替换函数中的字母“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 一次替换我的函数中使用的所有类名的一些问题。但是我最后仍然留下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 );

【问题讨论】:

  • 在不清除的情况下调用setInterval 会使其中的代码在无限循环中运行
  • 为什么你的代码会依赖于你的变量的具体名称?
  • 嗨@Blender,我不确定我是否理解你的问题,但如果它澄清了,我的实际项目将使用更复杂的类似函数的许多副本。我试图想出一个简单的方法,而不是必须更改函数内部多次使用的 className 引用,我只想保持大部分代码相同并使用var = 切换出来所有具有唯一性的默认类名。类似 `var uniqueClassName = defaultClassReferencesInsideFunction;` 之类的东西,因此在编码时节省了我一些时间。
  • @forestkelley:为什么不能在函数体中使用var $a = $( '.'+thisClass ); 而只使用$a
  • @Blender,我刚刚用我当前更长的代码更新了我的帖子。我认为,在某种程度上,我基本上已经完成了您使用 var classVar = 'a'; 而不是 var $a = $( '.'+thisClass ); 的建议。

标签: javascript jquery variables dollar-sign


【解决方案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 对象。当用作变量名的一部分时,美元符号没有意义。

【讨论】:

  • 太棒了!我只是在考虑回调,这是一个很好的解决方案。这比我尝试做的更有效。谢谢!我没有意识到我的var classVar = 'a'; 会超出函数延迟的范围。
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 当我将$a 替换为this['$' + thisClass]window['$' + thisClass] 时,它似乎对我不起作用。我可能需要研究这些以了解更多关于您的建议的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多