【问题标题】:getElementsByTagName is returning empty list in Chrome (but not in firefox)getElementsByTagName 在 Chrome 中返回空列表(但不在 Firefox 中)
【发布时间】:2012-12-04 14:09:18
【问题描述】:

我有一个 js 函数,它试图设置 XMLDoc 对象并设置全局参数之一(modelingDiagram)。

在尝试通过标签名称获取元素时,它总是返回空列表(但不是在 Firefox 中)。 在调试期间,我知道它正在为我在观察区域尝试的任何标签返回空列表 - xmlDoc.getElementsByTagName('进程');或 xmlDoc.getElementsByTagName("desc");

下面是js函数。注释区域表明我在哪里得到了异常。

function setXmlDoc(text)
{
if (window.ActiveXObject){
              var doc=new ActiveXObject('Microsoft.XMLDOM');
              doc.async='false';
              doc.loadXML(text);
} else {
              var parser=new DOMParser();
              var doc=parser.parseFromString(text,'text/xml');
}

xmlDoc = doc;
modelingDiagram = xmlDoc.getElementsByTagName('Processes')[0].getElementsByTagName('ModelingDiagram');
//Uncaught TypeError: Cannot call method 'getElementsByTagName' of undefined
}

文本变量包含字符串格式的xml-

<?xml version="1.0" encoding="utf-8"?>
<Processes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="">
  <Process>
    <desc value="Z45 Accounting">Z45 Accounting</desc>
    <height value="541">541</height>
    <width value="411">411</width>
    <xval value="50">50</xval>
    <yval value="50">50</yval>
    <Flowelements>
   ....
   ....
   ....

我无法弄清楚 Chrome 期望在这里获得正确列表的内容是什么?

【问题讨论】:

  • 考虑JQuery,它有很好的跨浏览器支持
  • ModelingDiagram 在您的代码中的什么位置?
  • modelingDiagram 是另一个全局变量,定义时用 null 初始化。
  • @LeviBotelho:如果您在 getElementsByTagName 中询问 ModelingDiagram,那么它是 的子节点之一(在附加的 xml 中没有显示)

标签: javascript


【解决方案1】:

根据 W3C DOM 3 核心规范 getElementByTagName() 返回 NodeList 以使“核心”规范独立于“html”规范,Gecko/Firefox 当前返回一个 NodeList(错误 162927),但从 Gecko/Firefox 19 开始,它将返回 HTMLCollection(错误 799464)。

但是 DOM4 草案说 getElementByTagName() 应该返回 HTMLCollection。

Internet Explorer、WebKit 和 Opera 当前返回 HTMLCollection。 尝试使用 namedItem 方法,这将使它类似于 HTMLCollection。

【讨论】:

    【解决方案2】:

    深入研究问题后,我知道这个 xml 字符串在第 0 个索引处有一些特殊字符(看不见)。我在执行 alert(text.charAt(0)) 时期待“

    text = text.substr(1, text.length);
    

    解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2013-07-31
      • 2017-11-10
      • 2012-07-27
      相关资源
      最近更新 更多