很抱歉,如果以前曾经问过这个问题,我已经阅读了所有类似的问题,虽然有很多看起来非常相似但没有人对它进行排序。
我遇到了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控制台运行相同的代码行,我得到了我预期的回报,因此不知道为什么有时会失败,而不是其他人。
请帮忙!
答案 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