2011-08-22 49 views
1

我试图使用jQuery .post()从另一个页面加载内容来解析返回的HTML,以便只提取我想要的部分。jQuery find()只在IE中返回null

问题是,虽然这在Firefox等工作,它不能在IE中工作。

我已经追踪到find()函数的问题。 IE和FF都成功地使用post从另一个页面(存储在“data”对象中)加载html。但是,虽然这行

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

在Firefox中产生输出,它在IE中产生空值。

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

在第一种情况下,我使用var jq = jQuery.noConflict(),并在所有jquery调用中使用“jq”而不是“$”。 在第二种情况下,我已经尝试将明确的帖子返回数据类型明确地声明为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,否则工作。

+1

多个元素是否有'id =“timeline_events”'? – thirtydot

+0

您是否尝试过'jq(“#timeline_events”,data)' –

+1

您的标记是否在响应数据中形成?这在IE中有时会造成问题。 – ShankarSangoli

回答

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(); 
} 
+1

我试过了 - 它仍然在IE中返回null,即使它现在正在搜索已经嵌入页面的html。这很奇怪。不过,有一件事是,我导入的html有head,body等标签,所以在追加到页面上时可能会导致问题... – erj

+0

是的,你说的对,它可能会。你能否从第一个到最后并在页面上放* *表示? –

+0

也可以尝试只选择'$('#timeline_events')'而不是使用带有id的'find'。 –

2

IE对于“加载”到DOM中的内容非常特别。如果你的内容不完整,你会得到这种确切的行为。我遇到了同样的问题,结果发现有问题的元素有一个未正确关闭的父项。

+0

我检查并确认内容格式正确。 – erj

+0

附录 - 我检查并验证了我的代码格式正确。但是,它是第三方CMS中的一个页面,它会自动加载很多html。可能有些格式不正确。如果是这样的话,是否有解决方法?或者我将不得不编写自己的代码解析器来提取我需要的东西? – erj