【问题标题】:jQuery XML Parsing IE7 / IE8jQuery XML 解析 IE7 / IE8
【发布时间】:2012-02-23 07:19:26
【问题描述】:

我正在尝试使用此方法使用 jquery 访问附加到 HTML 文档(生成的内容)末尾的 XML 内容:

$("SELECTION_STATE").find("CHARACTERISTIC").each( function() {
     if($(this).attr("name") == "Z_MDST" ) {
         alert($(this).find("MEMBER").attr("name"));
     }
 });

这在 Firefox 和 Chrome 中可以正常工作,但在 IE 中不行,它不会发出任何警报。

这是我要遍历的 xml

<SELECTION_STATE>

    <SELECTION type="CARTESIAN_PRODUCT">
      <CHARACTERISTICS>
        <CHARACTERISTIC name="Z_MDST">
          <SELECTIONS>
            <SELECTION type="SINGLE_MEMBER">
              <MEMBER name="00002213" type="MEMBER" text="2213"/>
            </SELECTION>
          </SELECTIONS>
        </CHARACTERISTIC>

有什么方法可以用 jquery 1.5 实现吗?

提前致谢

【问题讨论】:

    标签: jquery internet-explorer-8 internet-explorer-7


    【解决方案1】:

    因为您在 HTML 文档中。 IE 无法识别 XML。

    console.log($("SELECTION_STATE").get());
    

    在 IE 中返回 object HTMLUnknownElement

    为了使用 XML,您必须通过 IE XML 解析器运行它。类似的东西。

    var x = new ActiveXObject("Microsoft.XMLDOM");
    x.loadXML(yourXML) 
    

    你显然只想这样做 if($.browser.msie)

    附带问题:您是否使用 AJAX 加载 XML?

    更新:完整示例

    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    var myXML = document.body.innerHTML;  // or wherever you are storing the XML in the DOM
    xmlDoc.loadXML(myXML)
    
    if (xmlDoc.parseError.errorCode != 0) {
       var myErr = xmlDoc.parseError;
       console.log("You have error " + myErr.reason);
    } else {
       console.log(xmlDoc.xml);
    }
    
    $("SELECTION_STATE", xmlDoc).find("CHARACTERISTIC").each( function() {
         if($(this).attr("name") == "Z_MDST" ) {
             alert($(this).find("MEMBER").attr("name"));
         }
    });
    

    【讨论】:

    • 谢谢。不,这是一种特殊情况,我需要使用几行 javascript 访问同一文档(闭源商业产品)中生成的 HTML 内容。不涉及 AJAX :-( 我会试试你的建议
    • 相关问题 - 我将如何设法加载当前文档?
    • 重要的是要注意 XML 必须验证,否则 IE 不会解析它(它不像 HTML 那样宽容..)你是第一个例子错过了一些结束标签
    【解决方案2】:

    由于您已经在使用 jQuery,请使用 parseXML 函数(1.5 版中添加了 http://api.jquery.com/jQuery.parseXML/)

    var xmlDoc = $.parseXML(data);
    
    $(xmlDoc).find("CHARACTERISTIC").each( function() {
        if($(this).attr("name") == "Z_MDST" ) {
            alert($(this).find("MEMBER").attr("name"));
        }
    });
    

    【讨论】:

    • 这似乎不起作用,我正在使用 jquery 1.7 并在 win7 上测试 ie8
    • 重要的是要记住,在 IE 中,您不能使用.html() 来获取节点的内容。你必须使用.text()
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2011-09-16
    • 2012-06-16
    • 2012-10-12
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多