更新:澄清问题(我希望) 您好。
我正在使用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中这样做。
我正在寻找关于哪种方法是实现这一目标的“最佳方式”的意见。
答案 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();
在这种情况下检查要简单得多,你会避免“意大利面条代码”。