getElementsByTagName有时返回undefined

时间:2014-06-09 10:01:53

标签: 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响应 - 数据本身已删除,但所有非特定null的标记都包含数据。

>   <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中工作得很好,但是我收到了错误&#34;无法读取属性&#39; textContent&#39;未定义&#34; - 所以xmldoc.getElementsByTagName('b:FullName')[0].textContent;是问题,但我不能为我的生活找出原因。

我将API回复保存为HTML页面,并使用Chrome控制台运行相同的代码行,我得到了我预期的回报,因此不知道为什么有时会失败,而不是其他人。

请帮忙!

1 个答案:

答案 0 :(得分:1)

尝试通过标记名称获取元素的值。 我遇到了类似的问题,并且我已经了解到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