Javascript 为什么getElementsByClassName没有';不能在xhr reponseXML上工作

Javascript 为什么getElementsByClassName没有';不能在xhr reponseXML上工作,javascript,Javascript,为什么xhr.responseXML.getElementsByClassName('clazz')不起作用 以下是js: var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { var happiness = xhr.responseXML.getElementsByClassName('clazz');

为什么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); var xhr=new XMLHttpRequest(); xhr.onreadystatechange=函数(){ if(xhr.readyState==4){ var happiness=xhr.responseXML.getElementsByClassName('clazz'); //未捕获的TypeError:无法读取未定义的属性“innerHTML” console.log(“幸福?”+happiness[0].innerHTML); } }; //重写emimetype(“应用程序/xml”); open(“GET”,“xhr.php”,true); xhr.send(空); 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>




我是XHR的回应



xhr幸福




您能解释一下Chrome控制台中的以下输出吗

xhr.responseXML.getElementById('x') <div id="x" class="y"></div> xhr.responseXML.getElementsByClassName('y') [] xhr.responseXML.getElementById('x') xhr.responseXML.getElementsByClassName('y')) []
因为它是XML,不是HTML。在节点上也找不到
innerHTML
属性。

因为它是XML,而不是HTML。在节点上也找不到
innerHTML
属性。

xhr.responseXML是XML节点,而不是HTML元素,这意味着class属性没有特殊意义

然而,当我将xmlns声明添加到html标记时,responseXML上的getElementsByClassName才起作用(在Chrome上测试)


responseXML是XML节点,而不是HTML元素,这意味着class属性没有特殊意义

然而,当我将xmlns声明添加到html标记时,responseXML上的getElementsByClassName才起作用(在Chrome上测试)


虽然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;  }    
}
var XMLtagDIV=xhr.getElementsByTagName('div');
var XMLclassY=[];
var计数器=0//保持类数组增量一致,例如0,1,2,3,4。。。

对于(i=0;i,虽然getElementsByCassName()不起作用,但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;  }    
}
var XMLtagDIV=xhr.getElementsByTagName('div');
var XMLclassY=[];
var counter=0;//保持类数组增量一致,例如0,1,2,3,4。。。

因为(i=0;i
getElementsByClassName
不是基本的DOM方法,它是DOM HTML扩展的方法。XML中没有类的概念。
getElementsByClassName
不是基本的DOM方法,它是DOM HTML扩展的方法。XML中没有类的概念。