字符串上的 jQuery 选择器不适用于 Internet Explorer

Posted

技术标签:

【中文标题】字符串上的 jQuery 选择器不适用于 Internet Explorer【英文标题】:jQuery's selectors on string not working for 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 中变量格式的情况下解决此问题?

【问题讨论】:

【参考方案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解析器。

【讨论】:

实际上,“xml”变量是一个字符串,不是 XML 格式的,所以这也不起作用。 以上部分代码取自w3schools.com/xml/xml_parser.asp【参考方案2】:

尝试将dataType设置为html。

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

【讨论】:

好吧,这行不通。我相信默认的dataType无论如何都是html。

以上是关于字符串上的 jQuery 选择器不适用于 Internet Explorer的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 类选择器不适用于动态类选择器

Jquery 不适用于两个 :not 选择器?

jquery 属性选择器不适用于数据属性

为啥 jQuery 选择器适用于 Chrome,但不适用于 Safari?

jQuery 属性等于选择器不适用于自定义属性

jQuery 选择器不适用于添加的类