[英]jQuery use .load() to append data instead of replace
我怎么能有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找到
没有理由你不能使用$.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
设置缩小为仅仅#posts
元素,然后查找作为后代的.next
元素。
要使用load附加:
jQuery('#Posts').append( jQuery('<div>').load(...) );
这会将你加载的任何内容附加到#Posts元素中。
$.get("YadaYadaYada.php", function(dat) {
$(dat).find("body > #posts").appendTo("#container");
});
尝试使用$(this),类似于:
<div id="result">Hello World </div>
<script>
$(function() {
$(this).load('templates/test2.html', function(result) {
$('#result').append(result);
});
});
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.