测试XML元素是否存在时遇到问题

时间:2013-09-08 06:14:32

标签: javascript xml dom undefined typeof

当我正在搜索的所有元素都被声明时,我的脚本工作正常,但我不能在我的生活中找出如何测试元素是否存在。

$placeHolder.getElementsByTagName(tagname)[0].firstChild.data; // works if the element exists

我已经尝试过测试这些代码行:

if (!($placeHolder.getElementsByTagName(tagname)[0].firstChild.data in window)) //always true
{   
    alert("this doesn't exist");
    return $noValue;
}
else
    return $placeHolder.getElementsByTagName(tagname)[0].firstChild.data;

即使元素存在,if语句为true并执行第一个代码块,如果它不存在,它只会生成一个错误,说'$ placeHolder.getElementsByTagName(tagname)[0] .firstChild.data'未定义。

接下来我尝试了这种方法:

if (typeof $placeHolder.getElementsByTagName(tagname)[0].firstChild.data == "undefined")
    {   
        alert("this doesn't exist");
        return $noValue;
    }
    else
        return $placeHolder.getElementsByTagName(tagname)[0].firstChild.data;

如果元素确实存在,那么这个实际上可以正常工作,但仍会产生与上面相同的错误。

我尝试制作一个try catch块,但我遇到了同样的问题,必须测试该元素是否未定义。 d:其中

我需要的只是一种简单的方法来查看相关元素是否存在(即它是否存在未定义。)是否有一种我不知道的方法或者我做错了什么?

EDIT2:做$placeHolder.getElementsByTagName(tagname).length

在未定义元素的情况下有效,但如果它是这样的元素:     <anElement></anElement>

$ placeHolder.getElementsByTagName(tagname).length返回true,并在元素中没有任何内容时执行语句。尝试这个测试:

if ($placeHolder.getElementsByTagName(tagname)[0].firstChild.data == null)

也不起作用。

1 个答案:

答案 0 :(得分:1)

首先需要检查tagname中是否存在具有特定$placeHolder的元素。 getElementsByTagName会返回NodeList,因此您可以通过以下方式查看length

if( $placeHolder.getElementsByTagName(tagname).length > 0 )