我的以下代码运行正常。
$(document).ready(function() {
$('a.address').click(function() {
$('#box').slideDown("slow");
$.ajax({
type: "POST",
url: "details.php",
success: function(html){
$("#msg").html(html);
}
});
});
});
但是以下没有(在成功内部只改变了1行:),它没有加载任何内容..只滑动#box,而#msg在里面,但是不加载#address。
$(document).ready(function() {
$('a.address').click(function() {
$('#box').slideDown("slow");
$.ajax({
type: "POST",
url: "details.php",
success: function(html){
$("#msg").html($(html).find('#address').html());
}
});
});
});
The details.php is:
<div id="info">some text.</div>
<div id="address">The address</div>
答案 0 :(得分:8)
当您编写$(html)
时,您正在创建一个包含两个<div>
元素的jQuery对象。
在此对象上调用.find(...)
会搜索<div>
元素的后代。
由于这两个元素都没有任何子元素,我永远找不到任何东西。
相反,你可以调用.filter()
来搜索集合中的元素(但不是它们的后代)。
或者,您可以将返回的HTML包装在新的<div>
标记中,然后调用.find()
。由于您的元素将成为包装器<div>
的子元素,因此.find()
可以找到它们。
与.filter()
不同,如果更改服务器以返回您作为孩子正在寻找的<div>
,这仍然有用。
答案 1 :(得分:1)
jQuerys .load()
help 方法允许您加载&amp;插入页面片段:
$('a.address').click(function() {
$('#box').slideDown("slow");
$('#msg').load('details.php #address');
});
这可能是你想要在这里实现的目标。