这个jQuery代码有什么问题?

时间:2011-01-28 16:58:26

标签: jquery

我的以下代码运行正常。

$(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>

2 个答案:

答案 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');
});

这可能是你想要在这里实现的目标。