如何通过在DOM中查找变量来创建数组或变量对象?

时间:2017-06-02 20:37:03

标签: javascript jquery

我在Twig模板上生成一些JS变量,并在前面添加动态值。例如:

<script type="text/javascript">
    quoteGridId = 'grid_quote';
</script>

<script type="text/javascript">
    quoteContactGridId = 'grid_quote_contact';
</script>
<script type="text/javascript">
    archiveGridId = 'grid_archive';
</script>

我需要能够在页面加载后包含的Javascript文件中使用它们。如何创建包含所有* GridId变量的值数组?

我希望能够在脚本上使用以下内容:

[
    'quoteGridId' => 'grid_quote',
    'quoteContactGridId' => 'grid_quote_contact',
    'archiveGridId' => 'grid_archive',
]

更新

让我们试着让我的问题清楚,让那些开放的人帮忙。目前我正在研究遗留系统。这样的系统有一个生成gridId值的网格,最后包含一个JS文件,这样的文件使用var gridId来执行几个操作。

现在我需要在同一页面上复制多个网格,这会成为一个问题,因为两个网格生成相同的var名称:

gridId = 'something';
gridId = 'something1';

当脚本尝试到达gridId时,var始终是最新的(something1),因此在第一个网格上没有采取任何操作。

我的解决方案是将名称添加到每个gridId的前缀,从而产生我作为OP的内容。例如:

somethingGridId ='某事';    something1GridId ='something1';

我想要找到的是通过传递那些动态gridId来重用主JS文件的方法,但我找不到让它工作的方法。

我唯一想到的解决方案是每个网格创建相同的文件,然后将gridId的值更改为要使用的ID的名称....

我愿意接受任何想法吗?

3 个答案:

答案 0 :(得分:0)

为什么不创建顶级对象,然后将每个var指定为键值对,而不是分配quoteGridId = 'grid_quote',如:

var gridData = {}
gridData.quoteGridId = 'grid_quote'
gridData.quoteContactGridId = 'grid_quote_contact';
/* etc assignments */

//Access your data points like so in a loop, if you choose
Object.keys(gridData).forEach(key => {
   const val = gridData[key]
   //User `key`, and `val` however you'd like
})

答案 1 :(得分:0)

您可以使用正则表达式(正则表达式表达式?)搜索窗口变量,即/.+GridId/匹配以GridId结尾的任何单词或变量,然后您可以根据需要迭代它们。

示例:

&#13;
&#13;
var pattern = /.+GridId/;
GridIds = []
for (var varName in window) {
    if (pattern.test(varName)) {
        GridIds.push({varName:window[varName]})
    }
}
console.log(GridIds);
&#13;
<script type="text/javascript">
    quoteGridId = 'grid_quote';
</script>

<script type="text/javascript">
    quoteContactGridId = 'grid_quote_contact';
</script>
<script type="text/javascript">
    archiveGridId = 'grid_archive';
</script>
&#13;
&#13;
&#13;

希望这有帮助!

答案 2 :(得分:0)

我想你让你使用List。 每当你将值推到列表中时:

var myList = [];
myList.push('something');
myList.push('something1');

现在你可以像这样访问所有这些:

console.log(myList[0]);
console.log(myList[1]);

或者只是持续:

console.log(myList[myList.length - 1])