jQuery find()仅在IE中返回null

时间:2011-08-22 19:07:06

标签: jquery post xhtml null find

我正在尝试使用jQuery .post()从其他页面加载内容,以解析返回的html以仅提取我想要的部分。

问题在于,虽然这在Firefox等人中有效,但它在IE中不起作用。

我已将问题追溯到find()函数。 IE和FF都使用post从其他页面(存储在“data”对象中)成功加载html。但是,虽然行

debugText += jq(data).find('#timeline_events').html();

在Firefox中生成输出,它在IE中生成null。

我做了大量的研究,据我所知,这可能是因为jquery冲突,或者因为它加载的页面是xhtml。

在第一种情况下,由于这个原因,我使用var jq = jQuery.noConflict(),并使用“jq”代替“$”和所有jquery调用。 在第二种情况下,我尝试将post返回数据类型明确声明为html和xml,但结果没有变化。

有什么想法吗?

<script type="text/javascript" charset="utf-8"> 
var jq=jQuery.noConflict();
var debugText = ""; 
function loadNext() 
{ 
    jq.post("test.html", function(data) 
    {
        debugText += jq(data).find('#myEvents').html();
    }
}
</script>

更新: 以下是我想要加载到当前页面的测试页面中的一些html示例:

<table id="myEvents">
    <tbody>
        <tr>
            <td>Test</td>
        </tr>
    </tbody>
</table>

我最终想要做的是从该表中取出td元素并将它们插入到当前页面的另一个表中。

-Update- 我正在使用的jQuery版本:1.2.3

将数据加载到文档中的隐藏对象中,然后使用jquery选择必要的id元素会产生相同的结果 - 即IE中为null,否则将起作用。

2 个答案:

答案 0 :(得分:2)

IE非常特别地“加载”到DOM中。如果您的内容格式不正确,您会得到这种确切的行为。我遇到了同样的问题,事实证明,有问题的元素有一个未正确关闭的父元素。

答案 1 :(得分:0)

我的猜测是jQuery正在解析响应,就像解析XML一样,这意味着findfilter,并且在IE中由于某种原因会破坏许多其他方法。

尝试jq('[id=timeline_events]', data)

.html()也可能不起作用;您可能需要.text()

更好的解决方案可能只是将响应添加到页面并在那里解析它。

function(data){
    var $container = $('<div style="display:none">');
    $('body').append($container);
    $container.html( data );
    var html = $container.find('#timeline_events").html();
    $container.remove();
}