jQuery将HTML作为可遍历的jQuery对象

时间:2012-04-05 16:41:55

标签: ajax 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')。load('/ myurl.html #element');

4 个答案:

答案 0 :(得分: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');

我认为上述情况应该有效。

答案 1 :(得分:1)

当jQuery解析HTML时,它通常会删除html和body标签,因此如果删除了html和body标签,那么当你搜索的元素位于文档结构的顶层时,{{1}函数可能无法找到您要搜索的元素。

有关详细信息,请参阅此问题 - Using jQuery to search a string of HTML

答案 2 :(得分:0)

试试这个:

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

这将在$(响应)中搜索元素ID,将$(响应)视为DOM对象。

答案 3 :(得分:-1)

也许我误解了一些事情,但

.find('#element')

匹配ID为“element”的元素,如

<p id="element">

由于我没有看到“大量的东西”HTML,我不明白你想要找到的元素。