jquery IE8选择器奇异

时间:2009-06-02 16:06:45

标签: jquery xml internet-explorer-8 css-selectors

我正在使用以下结构的xml节点:

<CF>
    <T>
        <TX>title</TX>
        <em>15:2:</em>
    </T>
    <KW>
        <TX>SOMETHING ELSE</TX>
    </KW>
    <!-- OTHER TAGS, SOME OF WHICH HAVE A <TX> CHILD -->
</CF>

事情就像我在firefox中所期望的那样或多或少地起作用,但我在IE8中得到了奇怪的行为。例如,下面给出了一个长度为14的jquery对象:

jQuery("T TX", xmlDoc).length

它应该只有一个(“CF”标签只包含一个“T”标签,而后者只包含一个“TX”标签)。

如果我从选择器中删除“T”,则会增加陌生感,如下所示:

jQuery("TX", xmlDoc).length

我得到FEWER,​​而不是相等或更多的结果(jquery对象的长度为12)。

所以,第一个问题是:如果只有一个TX标签,并且它只有一个“T”标签,为什么jquery会找到14个“TX”标签,它们是“T”的后代?

第二个问题是:如果我简化选择器,删除“T”,为什么我会减少而不是更多结果呢?

我做错了什么,或者我偶然发现了一个错误?

3 个答案:

答案 0 :(得分:1)

也许你可以尝试这样的事情:

jQuery('T', mydoc).find('TX').length

看看会发生什么

答案 1 :(得分:0)

“&lt; TX&gt; title&lt; / TX&gt;”中有14个字符。由于我不知道有多少实际TX元素,我不能说第二个查询中的12是否是文档中TX元素的数量。

有点疯狂而且不在墙上......但是长老属性并没有回归你认为它的回归?

答案 2 :(得分:0)

使用jQuery解析IE8中的非html标签似乎存在问题。我偶然发现了this discussion,其中提出的答案是使用Microsoft.XMLDOM从XML构建DOM对象。这是关键部分:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);

我尝试了这个并解决了我在使用IE8构建XML文档时遇到的一些问题($()和$ .find没有返回任何内容,只有$ .filter可以工作)。

更新:您可能会改为查看$ .parseXML()。