我正在尝试使用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,否则将起作用。
答案 0 :(得分:2)
IE非常特别地“加载”到DOM中。如果您的内容格式不正确,您会得到这种确切的行为。我遇到了同样的问题,事实证明,有问题的元素有一个未正确关闭的父元素。
答案 1 :(得分:0)
我的猜测是jQuery正在解析响应,就像解析XML一样,这意味着find
,filter
,并且在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();
}