2015-06-22 22 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+ "');"); 
}