jQuery使用.load()来追加数据而不是替换

时间:2010-07-08 11:25:53

标签: jquery

我怎么能拥有load()的功能,除了我想附加数据而不是替换。也许我可以使用get()代替,但我想从加载的数据中提取#posts元素


更新

当我做alert(data)我得到......

<!DOCTYPE HTML>
<html lang="en-US">
<head>
  <meta charset="UTF-8">
  <title></title>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script src="jquery.infinitescroll.js"></script>
  <script>

  </script>
</head>
<body>
  <div id="info"></div>
  <div id="posts">
    <div class="post"> ... </div> 
    ...
  <ul id="pageNav" class="clearfix">
    <li><a href="page1.html">1</a></li>
    <li><a href="page2.html">2</a></li>
    <li><a href="page3.html">3</a></li>
    <li><a href="page4.html">4</a></li>
    <li><a href="page5.html">5</a></li>
    <li><a href="page3.html" class="next">next</a></li>  
  </ul>

可以在pastebin

找到完整的代码

4 个答案:

答案 0 :(得分:11)

没有理由不能使用$.get()提取所需的元素。

$.get('test.html',function(data) {
    var posts = $(data).find('#posts');
       // If the #posts element is at the top level of the data,
       //    you'll need to use .filter() instead.
       // var posts = $(data).filter('#posts');
    $('#container').append(posts);
});

修改

您可能没有注意到上面的代码注释,所以我将在这里更明确地说明。

如果#posts元素位于data中层次结构的顶部,换句话说,如果它没有父元素,则需要使用.filter()代替

$.get('test.html',function(data) {
    var posts = $(data).filter('#posts');
    $('#container').append(posts);
});

修改

根据以下评论,您似乎需要.filter()而不是.find()

原因是您传递的是整个HTML结构。当你这样做时,jQuery将body标记的直接子节点作为数组放在jQuery对象中。

jQuery的.filter()仅针对该阵列中的节点进行过滤。不是他们的孩子。

jQuery的.find()在数组中节点的后代之间进行搜索。

因此,你需要同时使用它们。 .filter()在顶部(#posts)和.find()获取正确的后代(.next)。

$(data).filter('#posts').find('.next');

这会将设置缩小为仅#posts元素,然后查找作为后代的.next元素。

答案 1 :(得分:2)

使用加载附加:

jQuery('#Posts').append( jQuery('<div>').load(...) );

这将把你加载的任何内容附加到#Posts元素中。

答案 2 :(得分:1)

$.get("YadaYadaYada.php", function(dat) {
   $(dat).find("body > #posts").appendTo("#container");
});

答案 3 :(得分:0)

尝试使用$(this),例如:

<div id="result">Hello World </div>
    <script>
    $(function() {
            $(this).load('templates/test2.html', function(result) {
                $('#result').append(result);
            });
        });
    </script>