【问题标题】:Having problems testing if an XML element exists测试 XML 元素是否存在时遇到问题
【发布时间】:2013-09-08 06:14:32
【问题描述】:

当我要搜索的所有元素都被声明时,我的脚本工作正常,但我终其一生都无法弄清楚如何测试一个元素是否存在。

$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 语句为真并执行第一个代码块,如果它不存在它只会生成一个错误,指出 '$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)

也不行。

【问题讨论】:

    标签: javascript xml dom undefined typeof


    【解决方案1】:

    首先需要检查您的$placeHolder 中是否存在具有特定tagname 的元素。 getElementsByTagName 返回NodeList 所以你可以检查它的length,这样:

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

    【讨论】:

    • 是的!有效!我应该知道检查数组的长度,我的代码的另一部分使用长度属性...
    • @user2419560 太好了,很高兴它有帮助!
    • 如果元素在那里,但里面什么都没有,我该怎么办?喜欢
    • @user2419560 以类似方式:if( $placeHolder.getElementsByTagName(tagname).length > 0 && $placeHolder.getElementsByTagName(tagname)[0].getElementsByTagName(childTagname).length >0 )
    • 我不得不改变最后一个条件,所以它有一个!在它前面,但除此之外它还有效。您介意解释一下它为什么有效吗?
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 2014-11-29
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多