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

如何避免javascript从不存在的元素检索值,javascript,dom,cookies,Javascript,Dom,Cookies,更新:澄清问题(我希望) 嗨 我正在Wordpress中开发一个插件,并根据用户权限a和B输出元素 对于A,我输出元素“Foo”。 在B的情况下,I输出元素“Bar” 到目前为止,在尝试检索值之前,我还没有检查元素是否存在。 这当然会在某些浏览器(如IE7)中给我一个javascript错误 我已经介绍了如何使用typeof()函数: if(typeof(element) == 'undefined') { //do something... } 我也在使用jQuery。因此,一种解决

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

我正在Wordpress中开发一个插件,并根据用户权限a和B输出元素

对于A,我输出元素“Foo”。
在B的情况下,I输出元素“Bar”

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

我已经介绍了如何使用
typeof()
函数:

if(typeof(element) == 'undefined') {
    //do something...
}
我也在使用jQuery。因此,一种解决方案可以是使用以下方法:

if ($("#mydiv").length > 0){
    // do something here
}
使用上述方法,我必须在尝试检索任何值之前检查每个元素

理想的解决方案是基于用户权限获取值。例如:

if (userPriv == A) {
    //get values from element 'Foo'
}
这样我就可以检查一次,并进行数据收集。我能想到的唯一解决方案是设置隐藏输入元素的值或使用cookie

<input type="hidden" id="userPriv" value="A" />
不幸的是,最后一个选项给了我一条警告消息,指出必须在标头中设置cookie(在html输出之前)。我想这是因为我在Wordpress上做的


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

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

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

在这种情况下,检查要简单得多,您将避免使用“意大利面代码”。

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

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

在这种情况下,检查要简单得多,您将避免使用“意大利面代码”。

如果我遗漏了什么,请原谅,但是在javascript中检查DOM元素通常非常简单

var elementA = document.getElementById('id_of_a');
var elementB = document.getElementById('id_of_b');
if (elementA) {
    //...
} else if (elementB) {
    //...
}
关键是if语句<如果找不到元素,code>getElementById将不返回任何null值,在if语句中该值将计算为false


或者,如果您真的不想检查单个DOM元素的存在,您可以将用户priv发送到一个隐藏的输入中并执行该操作吗?这是一种在客户端发送值的无cookie方式。类似(编辑为使用jQuery代码)


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

我仍然建议检查单个元素,而不是检查隐藏的输入。对我来说,它看起来更干净,更不引人注目,如果我遗漏了什么,请原谅,但是在javascript中检查DOM元素通常非常容易

var elementA = document.getElementById('id_of_a');
var elementB = document.getElementById('id_of_b');
if (elementA) {
    //...
} else if (elementB) {
    //...
}
关键是if语句<如果找不到元素,code>getElementById将不返回任何null值,在if语句中该值将计算为false


或者,如果您真的不想检查单个DOM元素的存在,您可以将用户priv发送到一个隐藏的输入中并执行该操作吗?这是一种在客户端发送值的无cookie方式。类似(编辑为使用jQuery代码)


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

我仍然建议检查单个元素,而不是检查隐藏的输入。对我来说,它看起来更干净,更符合我所能做到的不引人注目的原则。但这需要进行大量检查。我希望我能检查一次(对照用户信任),然后读取。getElementById返回null,实际上。@Cédric-nothing,null,nada,我把它们弄混了:-)如果有办法知道服务器端“userPriv”的确切值,我建议使用它而不是使用“userPriv”的效果。你可能误解了效果,而不是价值。谢谢Dan。今天早上我真的试过这个方法。我只是想得到你们的一些反馈,看看什么是最好的方法。我可以。但这需要进行大量检查。我希望我能检查一次(对照用户信任),然后读取。getElementById返回null,实际上。@Cédric-nothing,null,nada,我把它们弄混了:-)如果有办法知道服务器端“userPriv”的确切值,我建议使用它而不是使用“userPriv”的效果。你可能误解了效果,而不是价值。谢谢Dan。今天早上我真的试过这个方法。我只是想从你们那里得到一些反馈,看看什么是最好的方法。我不明白你们的问题是什么。是否正在访问可能不存在的dom元素?它在Wordpress中获得用户权限吗?它是在测试是否存在一些dom元素来衡量用户权限吗?当我回答你时,我正在考虑一些特定的问题,但在我查看了评论和你的更新之后,我不确定我是否正确理解了你的问题。请你澄清一下,你想检查什么?你到底在问什么?很抱歉。我现在已经更新了文本。希望这更清楚一点。我不明白你的问题是什么。是否正在访问可能不存在的dom元素?它在Wordpress中获得用户权限吗?它是在测试是否存在一些dom元素来衡量用户权限吗?当我回答你时,我正在考虑一些特定的问题,但在我查看了评论和你的更新之后,我不确定我是否正确理解了你的问题。请你澄清一下,你想检查什么?你到底在问什么?很抱歉。我现在已经更新了文本。希望这更清楚一点。