2015-06-22 90 views
0

我經常使用的功能,像這樣的:的Javascript:獲取變量的字符串名字

function elem(name){ 
    return document.getElementById(name); 
} 

這是使用像這樣:

var box = elem('box'); 

通常情況下,可變我的名字創建與傳遞給elem函數的字符串相同。

如何創建一個返回與變量名稱相同的元素的函數?

+0

您是否意識到您正在重新發明具有該功能的車輪,對不對?這就是說我沒有什麼可以做你想做的事,也許你可以放下變量並使用函數調用呢? –

回答

1
function elem(name){ 
    window[name]=document.getElementById(name); 
} 

現在,elem('box');將創建全局變量box = document.getElementById('box');,您可以使用。

示例代碼

<!DOCTYPE html> 
<html> 
<body> 
    <div id="box" onclick="hi();">box</div> 

<script type='text/javascript'> 
    function elem(name){ 
     window[name]=document.getElementById(name); 
    } 
    function hi(){ 
     elem('box'); 
     box.style.border='1px solid #ccc'; 
    } 
</script> 
</body> 
</html> 
3

簡短的回答是,你不能。該函數無法知道變量名是什麼。

你能來是使用一個可怕的,可怕的黑客並創建一個全局最接近:

function box (element_id) { 
    window[element_id] = document.getElementById(element_id); 
} 

box('foo'); 

......但即使不的你問什麼,相反(創建變量名稱來自字符串而不是其他方式)。

+0

這很有道理。我想我會測試一下並玩一下。 – Tobsta

0

更好地做一個命名空間像

var ns = {}; 
['box', 'box2'].forEach(function (el) { ns[el] = document.getElementById(el); }); 

訪問與

ns.box.innerHtml = 'foo'; 
+0

我寧願它不使用一個對象。它確實有道理,只是我仍然希望它作爲一個獨立的變量名稱。 – Tobsta

0

您可以隨時使用可用的DOM方法,而無需生成元素ID的變量。 例如,而不是使用

var elem = document.getElementById("box"); 
elem.innerHTML = "Test"; 

你可以直接使用:

box.innerHTML = "Test"; 

但如果你真的需要從其他原因相同名稱的變量,我認爲可以使用eval()函數來完成像這樣:

function box(elem){ 
    eval("var "+ elem + " = document.getElementById('" + elem+ "');"); 
}