javascript - getElementsByTagName 有时返回未定义

标签 javascript dom getelementsbytagname

很抱歉,如果之前有人问过这个问题,我已经阅读了所有看起来相似的问题,尽管有很多看起来非常相似的问题,但没有人对其进行排序。

我在使用 getElementsByTagName 时遇到问题 - 我有一个带有 iFrame 的网页,而 iFrame 基本上只是调用 API 并且应该返回当前用户的名称。这是相关的代码:

function apicallback(xml_request) {
    if (xml_request.readyState == 4 && xml_request.status == 200) {
        var xmldoc = xml_request.responseXML;
        if (xmldoc.getElementsByTagName('s:Fault').length > 0) {
            alert(xmldoc.getElementsByTagName('s:Reason')[0].childNodes[0].textContent);
        }
        else if (xmldoc.getElementsByTagName('GetUserDetailsByUserIdResponse').length > 0) {
            //process data
            document.getElementById('results').innerHTML = xmldoc.getElementsByTagName('b:FullName')[0].textContent;
        }
    }
}

此外,这里是发送到 xmldoc 的 XML 响应 - 数据本身已被删除,但所有非空标记都包含数据。

>   <GetUserDetailsByUserIdResponse xmlns="http://tempuri.org/">
>      <GetUserDetailsByUserIdResult xmlns:b="http://schemas.datacontract.org/2004/07/ErrisWebApi.Model"
> xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
>         <b:BirthDate></b:BirthDate>
>         <b:CommPrefID i:nil="true"/>
>         <b:FirstName></b:FirstName>
>         <b:FullName></b:FullName>
>         <b:GenderID></b:GenderID>
>         <b:LastName></b:LastName>
>         <b:LegalForename></b:LegalForename>
>         <b:LegalSurname></b:LegalSurname>
>         <b:MiddleNames i:nil="true"/>
>         <b:NameSuffix i:nil="true"/>
>         <b:PersonID></b:PersonID>
>         <b:PersonName></b:PersonName>
>         <b:PostalTitleID i:nil="true"/>
>         <b:PrefSurnameFirst i:nil="true"/>
>         <b:SimpleGenderID i:nil="true"/>
>         <b:SurnameFirst i:nil="true"/>
>         <b:TitleID></b:TitleID>
>      </GetUserDetailsByUserIdResult>   
>   </GetUserDetailsByUserIdResponse>

在 Firefox 和 IE 中,这工作得很好,但在 Chrome 中,我收到错误“无法读取未定义的属性‘textContent’” - 所以 xmldoc.getElementsByTagName('b:FullName')[0].textContent ; 是问题所在,但我一生都无法弄清楚为什么会这样。

我将 API 回复保存为 HTML 页面,并使用 Chrome 的控制台运行该行代码,并且得到了我期望的返回结果,因此不知道为什么它有时会失败,而其他时候则不会。

请帮忙!

最佳答案

尝试通过标签名称获取元素的值。 我遇到了类似的问题,并且我了解到 javascript 函数 getElementsByTagName 根据使用它的浏览器而具有不同的行为。这是我在不同项目中使用过的解决方法,它似乎适用于所有主要浏览器

test = item.getElementsByTagName('b:FullName')[0];
if(!test || test == null){
    test = item.getElementsByTagName('FullName')[0];
}
if(!test || test == null){
    test = item.getElementsByTagNameNS('namespaceurl', 'FullName')[0];
}
return test

关于javascript - getElementsByTagName 有时返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24117859/

相关文章:

javascript - 将 PNG Base-64 字符串转换为 TIFF Base-64 字符串

javascript - Cody Lindley 所说的 "nodes contained in the collection are either literally part of the live document or a snapshot of the live document"是什么意思?

javascript - 无法使用innerhtml或选择节点,返回null

javascript - 删除 div 后显示弹出窗口

javascript - Firebase 简单查询给出错误 : "Converting circular structure to JSON at JSON.stringify"

Javascript 检查记录集中的最大/最小/平均数

javascript - 为什么 getElementByClassName -> getElementsByTagName -> setAttribute 不起作用?

javascript - 标记 onclick 被处理两次

Java XML Dom 内存密集型

javascript - 如何将文本更改为不可见,但仍显示下划线?