【问题标题】:Get element's ID and set it as variable获取元素的 ID 并将其设置为变量
【发布时间】:2014-11-19 02:37:44
【问题描述】:

我有一个按钮:

<button class="btn btn-info continue">
    <i class="ace-icon fa fa-check bigger-110"></i>
    Continue                                        
</button>

点击:

$(".continue").click(function(e) {
    currForm = $(this).parents('form');
    e.preventDefault();
});

我可以很容易地获得 id:currForm.attr('id');,但我可以将此 id 的值设置为变量吗?

类似php的变量变量:

$a = 'hello';
$$a = 'world';
echo $hello;

编辑:我不想更改元素的 id。我想获取此 ID 并将其用作 javascript 变量的名称。 例如,我在上面提供的元素位于 ID='example_id' 的 form 中。 currForm.attr('id') 会给我example_id,我想设置一个变量example_id 并为其赋值。

var example_id = 'some value';

【问题讨论】:

  • 你的解释有点模糊。您可以通过 currForm.attr('id', 'your new id'); 设置 id;
  • 您应该没有理由创建这样的动态变量。这听起来像XY Problem。你到底想做什么?为什么不使用对象属性而不是变量。
  • ...仅供参考,您可以使用this.form 获取表单,这样您就无需创建jQuery 对象并使用.parents()。然后this.form.id 会给你ID。这将比您目前正在做的快很多很多倍。
  • @squint 是正确的。您不需要这样做。请解释您的代码的实际用途。另外$(this).closest('form') 比使用parents() 更好
  • ...您还应该知道,您可以使用.data() 方法将数据与元素直接关联。这似乎是您所追求的,因为您希望在元素 ID 之后命名变量。由于各种原因,我不是特别喜欢使用.data(),但它可能适合你需要的任何东西。

标签: javascript php jquery


【解决方案1】:

这里有 3 个选项供您选择。

eval(不推荐)

您可以使用 Javascript 函数eval 来实现您想要的。但请注意,这是不推荐(我强调了两次,希望你能理解!)。

不要不必要地使用 eval!

eval() 是一个危险的函数,它以调用者的权限执行它传递的代码。如果您使用可能受到恶意方影响的字符串运行 eval(),您最终可能会在具有网页/扩展程序权限的用户计算机上运行恶意代码。更重要的是,第三方代码可以看到 eval() 被调用的范围,这可能导致类似 Function 不易受到的攻击。

它会这样使用:

eval('var ' + varName + ' = "something";');

Window 对象表示法(比eval 更好,仍然不推荐)

此方法包括在全局窗口对象上使用 JavaScript 提供的对象表示法。这会污染全局窗口范围,并且可以被其他 JS 文件覆盖,这很糟糕。如果您想了解有关该主题的更多信息,这是一个很好的问题:Storing a variable in the JavaScript 'window' object is a proper way to use that object?

要使用此技术,您可以执行以下操作:

window[varName] = something;
alert(window[varName]);

使用对象(推荐)

最好的解决方案是创建自己的变量范围。例如,您可以在全局范围内创建一个变量并为其分配一个对象。然后,您可以使用对象表示法来创建动态变量。它的工作方式与窗口相同:

var globalScope = {};

function awesome(){
    var localScope = {};
    globalScope[varName] = 'something';
    localScope[varName] = 'else';

    notSoAwesome();
}

function notSoAwesome(){
    alert(globalScope[varName]); // 'something';
    alert(localScope[varName]); // undefined
}

【讨论】:

    【解决方案2】:

    您可以使用 javascript 对象来做到这一点:

    var currForm = $(this).parents('form');//form id="hello"
    
    var obj = {};
    
    obj[currForm.attr('id')] = 30;
    
    console.log(obj.hello)
    

    【讨论】:

      【解决方案3】:

      您可以使用和对象将变量存储在:

      var variables = {};
      

      要添加变量,只需键入:

      variables[name] = value;
      

      并访问该值:

      variables[name] 
      

      在这里查看:jsFiddle

      按钮 2 读取 variables[formid] 的值,按钮 1 设置 formid 提交

      【讨论】:

        【解决方案4】:

        尝试以下方法之一:

        $(this).attr(example_id, "value")
        

        或者

        window[ currForm.attr(id)] = 12;
        

        或者

        window[ this.id ] = 12;
        

        【讨论】:

          【解决方案5】:

          归档您真正想要的内容的最佳选择是使用 eval(),如下所示:

          eval("var " + currForm.attr('id');
          

          检查此链接->

          Dynamic Variables in Javascript

          【讨论】:

            【解决方案6】:

            使用 eval(但不推荐):

            var id = 'that_id';
            eval(id+" = 'other id';");
            alert(that_id); // results: 'other id'
            

            【讨论】:

              猜你喜欢
              • 2021-10-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-21
              • 2013-01-16
              • 2014-07-21
              相关资源
              最近更新 更多