【问题标题】:jQuery's selectors on string not working for Internet Explorer字符串上的 jQuery 选择器不适用于 Internet Explorer
【发布时间】:2011-04-23 22:04:18
【问题描述】:

我使用 jQuery 的 $.get() 进行 ajax 调用,将字符串返回给函数。该字符串同时包含 xml 和 html,我必须使用 jQuery 的选择器提取部分 html,例如:

$.get(
    url,
    function (xml) {
        $(xml).find('something').whatever();
    }
);

在这种情况下,假设 xml var 是一个字符串(确保在 php 中发送的 headers text/html),Firefox 和 Chrome 一切正常。但是在 IE 中却找不到“something”标签。

为什么这不起作用?

更新:

我试图简化问题:

var test = "<hello><world /></hello>";
alert($(test).find('world').length);

这在每个浏览器上都可以正常工作(显示 1),但在 Internet Explorer 中却不行,它显示 0(仅在 IE7 上尝试过)。

如何在不更改 XML 中变量格式的情况下解决此问题?

【问题讨论】:

    标签: internet-explorer jquery jquery-selectors


    【解决方案1】:

    由于它的 XML 尝试以下操作:

    $(xml).contents().find('something').whatever()

    这类似于在 iframe &lt;iframe&gt; 中访问 DOM

    更新:

    回答弗洛伦的评论:

    $(document).ready(function(){  
      var txt = "<hello><world/></hello>";  
      if (window.DOMParser) {  
       parser=new DOMParser();  
       xmlDoc=parser.parseFromString(txt,"text/xml");  
      }  
      else // Internet Explorer
      {  
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");  
        xmlDoc.async="false";  
        xmlDoc.loadXML(txt);  
      }  
      alert($(xmlDoc).find('world').length);  
    });  
    

    要从本地字符串变量解析 XML 字符串,您必须专门为 IE 创建一个解析器对象。 FF 或其他可能不需要它。

    但是对于$.ajax,如果dataType被指定为xml,那么这个转换是自动完成的,我们不需要创建XML解析器。

    【讨论】:

    【解决方案2】:

    尝试将dataType设置为html。

    $.get(
        url,
        function (xml) {
            $(xml).find('something').whatever();
        },
        'html'
    );
    

    【讨论】:

    • 好吧,这行不通。我相信默认的dataType无论如何都是html。
    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多