2017-06-02 16 views
0

我在一個樹枝模板上生成了一些JS變量,我用動態值爲它們加了前綴。例如:如何通過在DOM中查找變量來創建數組或變量對象?

<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', 
] 

UPDATE:

讓我們試着讓我的問題明確爲打開幫助那些人。目前我正在致力於遺留系統。這樣的系統有一個網格,生成一個gridId值,最後包含一個JS文件,這個文件使用var gridId來執行幾件事情。

現在我需要複製相同的頁面上有一個網格,變得由於兩個網格生成相同的變數名稱的一個問題:當腳本試圖達到gridId變種越來越

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

總是最新的(東西1),因此在第一個網格上沒有采取任何行動。

我的解決方案是在每個gridId的前面加上我作爲OP的名稱。例如:

somethingGridId ='something'; something1GridId ='something1';

我想找到的是一種通過傳遞這些動態gridId來重新使用主JS文件的方法,但是我找不到一種方法來使其工作。

我在心中唯一的解決方案是創建每格相同的文件,然後gridId的值更改爲ID的使用的名字....

我打開思路,任何?

+0

你的意思是'window [「quoteGridId」]'? – mplungjan

+0

@mplungjan不知道這是否會幫助我,我只顯示了三個例子,但可能比這更多 – ReynierPM

+0

是否有任何理由不能在Twig模板中創建數組? 'var gridvars = ['grid_archive','grid_quote_contact','grid_archive'];'。然後你可以將'window.gridvars'傳遞給你的腳本。 –

回答

0

您可以搜索與正則表達式的窗口變量(正則表達式表達式?)即/.+GridId/匹配以GridId結尾的任何單詞或變量,然後您可以根據需要對它們進行迭代。

例子:

var pattern = /.+GridId/; 
 
GridIds = [] 
 
for (var varName in window) { 
 
    if (pattern.test(varName)) { 
 
     GridIds.push({varName:window[varName]}) 
 
    } 
 
} 
 
console.log(GridIds);
<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>

希望這有助於!

0

不是指定quoteGridId = 'grid_quote'的,你爲什麼不創建一個頂級對象,然後分配每個var當成一個關鍵值對,如:

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 
}) 
+0

看看更新也許這將清除一點我在第一個問我不認爲你的方式將工作要麼 – ReynierPM

0

我想你有你使用列表。 每次按下時,你看重的名單像:

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

現在你卡恩訪問所有的人都這樣:

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

或者就在上個星期:

console.log(myList[myList.length - 1]) 
相關問題