2012-04-05 53 views
6

这是一个超级简单的问题,我似乎无法找到一个好的答案了。jQuery GET html作为遍历jQuery对象

$.get('/myurl.html', function(response){ 
    console.log(response); //works! 
    console.log($(response).find('#element').text()); //null :(
}, 'html'); 

我只是想遍历我的html响应。到目前为止,我能想到的唯一办法就是将正则表达式内置到body标签中,并将其用作字符串来创建我的遍历jQuery对象。但那似乎很愚蠢。任何人都在意指出正确的方式来做到这一点?

也许是我的html?

<html> 
    <head> 
     <title>Center</title> 
    </head> 
    <body> 
     <!-- tons-o-stuff --> 
    </body> 
</html> 

这也工作正常,但并不适合我的需求:

$( '#myelem')负载( '/ myurl.html #element');

+1

如果您在响应html中寻找具有值为“element”的“id”属性的某个元素,那么它对我来说看起来是正确的。我不知道为什么这不起作用。 – jessegavin 2012-04-05 16:44:07

+1

你提取的html是怎么样的? – 2012-04-05 16:44:15

+0

这应该回答你的问题: http://stackoverflow.com/questions/9540218/a-javascript-parser-for-dom/9540313#9540313 – 2012-04-05 16:46:07

回答

7

它失败了,因为它不喜欢<html><body>

使用此处介绍的方法:A JavaScript parser for DOM

$.get('/myurl.html', function(response){ 
    var doc = document.createElement('html'); 
    doc.innerHTML = response; 

    console.log($("#element", doc).text()); 
}, 'html'); 

我觉得上面应该工作。

+0

工作。但为什么? – Fresheyeball 2012-04-05 17:01:49

+0

我需要看看jQuery如何解决这个问题的内部细节。基本上jquery有一个方法,当它给出html字符串参数时,它如何构建dom对象。这很简单,与包含'body'和'html'标签的html字符串不兼容,但幸运的是它不是唯一的方式,上面的方式是一种不同的方式。 – 2012-04-05 17:08:33

+0

这真的很有趣。 – Fresheyeball 2012-04-05 17:44:15

0

尝试这种情况:

$("#element", $(response)).text() 

此搜索在$(响应)的元素ID处理$(响应),为DOM对象。

+0

response.responseText未定义 – Fresheyeball 2012-04-05 16:50:38

1

当jQuery解析HTML时,它通常会去掉html和body标签,所以如果您正在搜索的元素位于文档结构的顶层,一旦html和body标签被移除,那么find函数可能会无法找到您正在搜索的元素。

有关进一步信息这一问题 - Using jQuery to search a string of HTML

+0

这不是顶级物品。 – Fresheyeball 2012-04-05 17:04:09

-1

也许我误解的东西,但

.find('#element') 

用的ID匹配的元素 “元素,” 像

<p id="element"> 

由于我没有看到“吨的东西”HTML我不明白你试图找到什么元素。

+1

这不是大卫的答案。将它作为评论发布会更合适。 – 2012-04-05 18:30:00