【问题标题】:Find a variable using jquery [duplicate]使用jquery查找变量[重复]
【发布时间】:2016-06-07 14:18:43
【问题描述】:

我的页面上有许多 javascript 变量:

var opts_???? = ...
var opts_???? = ...
var opts_???? = ...

????被内容管理系统分配了一个随机数,所以我不知道变量的全名。

我正在寻找任何未定义的。

在 jQuery 中有没有办法遍历所有以 opts_ 开头的变量,以便我可以测试它们是否未定义?

如果有帮助的话,这些变量都是全局的。

如果不在 jQuery 中,我会选择常规的 javascript。

【问题讨论】:

  • 变量名是否对应页面中html元素的name、class或id属性?
  • 不,这些只是变量
  • 你说的undefined是什么意思?

标签: javascript jquery


【解决方案1】:

只有在所有变量都在全局范围内声明时才有可能(因此也可以作为全局 window 对象的属性使用)。

既然是你的,你可以使用Object.keys(window)获取所有此类属性的名称,然后使用$.eachArray.prototype.forEach依次测试每个属性。

var opts = Object.keys(window).filter(function(n) {
    return n.substring(0, 5) === 'opts_';
});

var opts_undefined = opts.filter(function(n) {
    return window[n] === undefined;
});

[写成两个要求清晰而不是效率]

【讨论】:

    【解决方案2】:

    如果变量在全局范围内(也就是说,不是在函数中创建的),它们也应该可以作为 window 对象的属性使用。也就是说,变量opts_1234也可以通过window.opts_1234或者window['opts_1234']来访问。

    获取所有变量的最简单方法是:

    var variables = Object.keys(window).filter(function(prop) {
        return prop.substring(0, 5) === 'opts_';
    });
    

    现在variables 包含一个名称数组,例如['opts_1', 'opts_666']

    您还可以扩展该过滤器以仅包含那些未定义的变量:

    var variables = Object.keys(window).filter(function(prop) {
        return prop.substring(0, 5) === 'opts_' && window[prop] !== undefined;
    });
    

    【讨论】:

    • .indexOf 是(恕我直言)这项工作的错误功能。
    • 我考虑过使用正则表达式,但我不确定它是否会产生很大的不同。你有什么建议?
    • 好吧,在我的回答中我使用了.substring(),因为我明确地只想测试前五个字符。 .indexOf 的问题在于它会不必要地扫描整个字符串。
    • 好点,我会更新我的答案
    【解决方案3】:

    var opts_1 = 'test';
    var opts_2 = 'test1';
    var opts_3 = 'test2';
    var opts_4 = undefined;
    
    var vars = Object.keys(window).filter(function(key){
       return (key.indexOf("opts_")!=-1 && window[key] == undefined) 
    });
    console.log(vars);

    【讨论】:

      【解决方案4】:

      用途:

      var marker='opts_';
      var results=$('selector').find(marker);
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2019-09-05
        • 2012-10-01
        • 2017-10-24
        • 1970-01-01
        • 2016-01-18
        • 2019-03-12
        • 2016-10-26
        • 1970-01-01
        • 2014-04-08
        相关资源
        最近更新 更多