很抱歉,如果之前有人问过这个问题,我已经阅读了所有看起来相似的问题,尽管有很多看起来非常相似的问题,但没有人对其进行排序。
我在使用 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/