[英]Why getElementsByClassName doesn't work on xhr reponseXML
為什么xhr.responseXML.getElementsByClassName('clazz')不起作用?
這是js:
var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { var happiness = xhr.responseXML.getElementsByClassName('clazz'); //Uncaught TypeError: Cannot read property 'innerHTML' of undefined console.log("happiness ? " + happiness[0].innerHTML); } }; //xhr.overrideMimeType("application/xml"); xhr.open("GET", "xhr.php", true); xhr.send(null);
xhr.php包含以下內容:
<?php
header('Content-type: application/xml; charset=UTF-8');
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
?>
<!DOCTYPE html>
<html>
<head>
<title>I'm the XHR response</title>
</head>
<body>
<div class="clazz">xhr happiness</div>
<div id="x" class="y"></div>
</body>
</html>
您能否在Chrome控制台中解釋以下輸出?
xhr.responseXML.getElementById('x') <div id="x" class="y"></div> xhr.responseXML.getElementsByClassName('y') []
xhr.responseXML是XML節點,而不是HTML元素,這意味着class屬性沒有特殊含義。
但是,當我在html標記中添加xmlns聲明時,responseXML上的getElementsByClassName才起作用(在Chrome上測試)。
<html xmlns="http://www.w3.org/1999/xhtml">
盡管getElementsByClassName()無法工作,但getElementsByTagName()可以; 和標記具有屬性。
var XMLtagDIV = xhr.getElementsByTagName('div');
var XMLclassY = [];
var counter = 0; //Keep class array incrementally uniform e.g. 0,1,2,3,4...
for(i=0; i<XMLtagDIV.length; i++)
{
if(XMLtagDIV[i].getAttribute('class') == 'y') {
counter++;
XMLclassY[counter] = XMLclassY; }
}
現在,數組變量XMLclassY將充當getElementsByClass();。 應該。
因為它是XML,而不是HTML。 您還將在節點上找不到innerHTML
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.