【问题标题】:Why getElementsByClassName doesn't work on xhr reponseXML为什么 getElementsByClassName 在 xhr reponseXML 上不起作用
【发布时间】:2012-03-18 05:37:11
【问题描述】:

为什么 xhr.responseXML.getElementsByClassName('clazz') 不起作用?

这里是js:

var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { 如果(xhr.readyState == 4){ var 幸福 = xhr.responseXML.getElementsByClassName('clazz'); //未捕获的类型错误:无法读取未定义的属性“innerHTML” console.log("幸福?" +幸福[0].innerHTML); } }; //xhr.overrideMimeType("application/xml"); xhr.open("GET", "xhr.php", true); xhr.send(null);

xhr.php 包含以下内容:

header('内容类型: application/xml; charset=UTF-8');
echo " \n";
?>




我是 XHR 响应



xhr 幸福




正文>

标签: javascript


【解决方案1】:

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

但是,当我将 xmlns 声明添加到 html 标记时,responseXML 上的 getElementsByClassName 就可以正常工作(在 Chrome 上测试)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      虽然 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();应该。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-01
        • 2021-04-26
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 2013-03-08
        • 1970-01-01
        相关资源
        最近更新 更多