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

标签 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 block ,但遇到了同样的问题,必须测试元素是否未定义。 D:<

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

编辑2:做$placeHolder.getElementsByTagName(tagname).length

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

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

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

也不起作用。

最佳答案

首先需要检查 $placeHolder 中是否存在具有特定 tagname 的元素。 getElementsByTagName 返回 NodeList,以便您可以检查其长度,如下所示:

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

关于javascript - 测试 XML 元素是否存在时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18681020/

相关文章:

javascript - 停止 react 组件中的声音

javascript - 单击绑定(bind)以形成子按钮

xml - ACORD XML 命名空间

javascript - 带有关联数组数据集的 D3.js 表

JavaScript 函数一次对 6 个 id 执行(6 次调用后返回?)

javascript - 如何使用 "..." chop css 中的列表,然后在列表中添加 "+3"更多项目?

javascript - JQuery 在函数内显示隐藏的 Div 命令

C# 反序列化列表计数为零

c# - 如何在没有名称的 XML 中查找属性及其值?

html - Xpath 选择父级具有某些属性的节点