【发布时间】:2010-07-19 08:52:41
【问题描述】:
编辑:感谢肯尼和其他类似回答的人。真的是DOH...真是愚蠢到不记得了。
也许答案是如此简单,以至于我无法理解......但我知道这里有人可以在这方面教我。
所以我有一个相当大的项目,它处理大量非常大的 JSON、对象、数组等。我需要一种在不事先了解这些数据的实际名称的情况下动态访问这些数据的方法。我知道 someobjectname[string] 有效,但我需要 [string][string][string] 等。换句话说,整个事情必须是完全动态的。
我知道,我知道,这种方法存在性能问题,我确信有更好的方法,但我继承了这个问题,相信我,这不是改变它的选择。
现在,这里有一个超级简化的例子来证明潜在的问题。我找不到不使用 eval() 的方法,我无法使用它,因为数据不是来自受信任的来源。
在此示例中,假设 foo 和 bar(对象名称和相应的选项值)直到运行时才能知道。为简单起见,假设它们是使用您最喜欢的服务器端代码打印的。
<script>
// Pretend these objects are inserted into
// the DOM dynamically from where ever
// so we don't know the names till runtime
var foo = {
value : "something"
}
var bar = {
value : "something else"
}
window.onload = function() {
function alertValue(option) {
// vvvv This is what I can't do
var selected_object = eval(option.getAttribute("value"));
var selected_value = selected_object.value;
alert(selected_value);
}
var option1 = document.getElementById("option1");
var option2 = document.getElementById("option2");
option1.onclick = function () {
alertValue(this);
}
option2.onclick = function () {
alertValue(this);
}
}
</script>
<html>
<select> <!-- Pretend these values are generated at runtime serverside -->
<option id="option1" value="foo">Foo's value</option>
<option id="option2" value="bar">Bar's value</option>
</select>
</html>
任何帮助都会很棒。我希望这是一个简单的“DOH”时刻。请不要撕开这段代码或方法,因为没有意义。它并不像真正的项目那样复杂。这只是一个概念证明,所以您会遇到问题。
【问题讨论】:
标签: javascript arrays json object eval