如何避免javascript从不存在的元素中检索值

时间:2009-06-16 08:48:45

标签: javascript dom cookies

更新:澄清问题(我希望) 您好。

我正在使用Wordpress开发插件,并根据用户权限A和B输出元素。

如果是A,我输出元素“Foo” 在B的情况下,我输出元素“Bar”。

到目前为止,在尝试检索值之前,我还没有检查过元素是否存在。 这当然在某些浏览器中给我一个javascript错误(比如IE7)。

我看过使用typeof()函数:

if(typeof(element) == 'undefined') {
    //do something...
}

我也在使用jQuery。所以一个解决方案就是使用它:

if ($("#mydiv").length > 0){
    // do something here
}

使用上述方法,我必须在尝试检索任何值之前检查每个元素。

“理想”解决方案是根据用户权限获取值。 E.g:

if (userPriv == A) {
    //get values from element 'Foo'
}

这样我可以检查一次,并进行数据收集。我能想到的唯一解决方案是设置隐藏输入元素的值或使用cookie。

<input type="hidden" id="userPriv" value="A" />

另一个解决方案是为cookie添加一个值。

setcookie("userPriv", "A");

不幸的是,最后一个选项给了我一条警告信息,说明必须在标题中设置cookie(在html输出之前)。我想这是因为我在Wordpress中这样做。

我正在寻找关于哪种方法是实现这一目标的“最佳方式”的意见。

2 个答案:

答案 0 :(得分:4)

如果我错过了什么,请原谅我,但在javascript中检查DOM元素通常很容易。

var elementA = document.getElementById('id_of_a');
var elementB = document.getElementById('id_of_b');
if (elementA) {
    //...
} else if (elementB) {
    //...
}

关键是if语句。如果找不到该元素,getElementById将返回 nothing null,这将在if语句中评估为false。


或者,如果您不确实想要检查单个DOM元素是否存在,您是否可以在隐藏输入中发送用户priv并对其进行操作?这是一种无需cookie的方式来发送客户端的价值。像(编辑为jQuery代码)

<input type="hidden" id="userPriv" value="A" />
...

var priv = $('#userPriv').val();
if (priv == 'A') {
    //...
}

我仍然建议在检查隐藏输入时检查单个元素。对我来说似乎更干净,更不引人注意的是

答案 1 :(得分:1)

您可以将对象用作关联数组:

var map = new Object();
map[A.toString()] = new Foo();
map[B.toString()] = new Bar();

在这种情况下检查要简单得多,你会避免“意大利面条代码”。