2009-06-16 36 views
1

更新:澄清的问题(我希望) 嗨。如何避免JavaScript从不存在的元素中检索值

我正在开发中的WordPress插件,我根据用户权限A和B.

输出元件在A的情况下,我输出中元素“富”。
在B的情况下,我输出元素“Bar”。

直到现在,我还没有检查是否存在一个元素,然后尝试检索该值。 这当然给了我一些浏览器(如IE7)的JavaScript错误。

我看了使用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

我不明白你的问题是什么。它访问可能不存在的dom元素吗?它在Wordpress中获得用户权限吗?它是否测试了一些dom元素作为衡量用户权限的方式? – Alsciende 2009-06-16 09:26:39

+0

当我回答你时,我正在考虑某些问题,但在查看评论和更新后,我不确定是否正确理解了你的问题。你能否澄清一下,你想检查什么?你究竟在问什么? – 2009-06-16 09:50:54

回答

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 如果未找到该元素,则该元素将在if语句中计算为false。


另外,如果你不真的要检查各个DOM元素的存在,你可以发送用户的私法在一个隐藏的输入和行为?这是一种免费发送cookie的方式,可以在客户端发送价值。类似的东西(编辑有jQuery代码代替)

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

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

我仍然建议检查一个隐藏的输入检查单个元素。对我来说这似乎更清洁,更多沿着不显眼的线条

1

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

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

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

相关问题