0

我正在使用 $.get 获取 HTML 文档(也尝试过 $.ajax):

$.get('/products/', function(data) {
    $('.content .article').remove();
    $('.content').prepend($(data).find('.article'));
});

检查数据是否正常:

alert(data);

它可以毫无问题地打印html文件。但是当我尝试打印时:

alert($(data).find('.article').html());

或者

alert($('.article', data).html());

它总是打印空。

我在这里发现了一个类似的问题:Extract part of HTML document in jQuery,但解决方案对我不起作用。

编辑:内容 o 生成的 HTML。

<!DOCTYPE html>
<html><head></head><body>

<div class="article"><h1>Lorem Ipsum</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>

</body></html>
4

2 回答 2

2

嗯,如果你把内容放上去就好了,data但从我得到的信息中,我可以告诉你这些事情......


首先,您在最后一个.content语句之后缺少顶部示例的引用。

看这里:

$('.content').prepend($(data).find('.article'));

更正为:

$('.content').prepend($(data).find('.article'));

然后,尝试做console.log($(data));并确保您的字符串正确转换为 jQuery 对象。

另一件事,尝试做console.log($(data).find('.article'));并确保它返回的不仅仅是一个元素,因为.html()从很多元素中做可能会返回null

而且,如果有多个元素并且假设您只想要第一个,请执行以下操作:

var articles = $(data).find('.article');
var firstArticle = articles.first().html();

或者,如果您想在所有文章中循环,请执行以下操作以获取每个html

$.each($(data).find('.article'), function(index, value){
   console.log($(this).html());
});

如果对您没有任何效果,那么我可以告诉您data在将其转换为 jQuery 对象之前尝试检查字符串的确切值。


解决了

  • 当从jQuery 中的页面获取时,您的datafrom 回调是这样组成的:string/products/$.get

在此处输入图像描述

  • 如您所见,当转换data$(data)并尝试查找.article时将失败,因为该对象不仅由一个元素组成。

  • 所以你的代码必须修改为:

    $.get('/products/', function(data){
        $('.content .article').remove();
        $('.content').prepend($(data).eq(1));
    });
    
  • 现在一切都将正常工作,因为您的代码将从您的对象中仅找到第二个元素(文章 html - 根据数组索引的第一个元素)$(data),然后将其放入您的.contentdiv 中。

希望这会有所帮助:-) 我测试过并且它正在工作。

PS。不要忘记总是打印元素,正如我在开始回答时告诉你的那样,尝试console.log($(data));知道它是如何组成的!

于 2012-08-10T20:22:44.643 回答
1

试试这个:

$(data).filter('.article');

这就是我将数据字符串转换为 jQuery 对象时得到的结果:

[div.article, div.nav]

好像当你转换一个代表整个 HTML 文档的字符串时,jQuery 只收集正文中的项目。

于 2012-08-12T22:32:59.773 回答