Javascript 如何使用Jquery来滑下在添加到DOM之前隐藏的元素?

Javascript 如何使用Jquery来滑下在添加到DOM之前隐藏的元素?,javascript,dom,jquery,Javascript,Dom,Jquery,我认为这相当简单。但事实证明并非如此。我正在使用此代码: <script type="text/javascript"> $(document).ready(function () { $("button#submitComment").click(function () { // Get the div containg the comment list var commentList = $("#comm

我认为这相当简单。但事实证明并非如此。我正在使用此代码:

<script type="text/javascript">
    $(document).ready(function () {

        $("button#submitComment").click(function () {

            // Get the div containg the comment list
            var commentList = $("#comments");

            // Get the ID of the last comment displayed so server 
            // can query recent non-displayed comments
            var lastId = $(".comment h4").last().attr("id");

            // Get data to post to server
            var commentData = "EntryId=" + $("input#EntryID").val()
                              + "&Comment=" + $("textarea#Comment").val()
                              + "&LastId=" + lastId;

            $.post(
                "/find/Comments/Comments",
                commentData,
                function (data) {
                    alert(data); // confirm server response

                    newComments = $(data).hide(); // hide elements so they can be animated after adding them to the DOM

                    commentList.append(newComments); // add to DOM

                    $(".comment").each(function () {
                        $(this).slideDown("fast") // animate
                    });

                    $("#Comment").attr("value", ""); // clear comment form
                }
            );

        });
    });

</script>
啊,不是做$(data).hide()而是做

或 $(数据).find('.comment').attr('style','display:none'))


当然,第二个将覆盖您的样式属性。你也可以把整件事放在一个span或div中。

这让我走上了正确的道路。我的问题是由数组中包含非jquery对象引起的。当我把它打印到控制台上时,我得到了

[jquery-div, <TextNode textContent=" ">, jquery-div]
[jquery div,jquery div]

当我将“.hide()”更改为“.filter(“div”).hide()”时,它修复了错误

当您收到多个注释时,它们很可能是作为json对象数组提交的。也许您需要根据得到的是一个答案还是多个答案,对结果集进行不同的处理。您正在调用的服务还应始终返回数组。当只有一个项时,该数组将有一个元素。这样,无论发生什么,你都可以以同样的方式对待回应。否则,应该有两个单独的服务器调用,一个返回单个注释,另一个返回多个注释。我相信你的问题就在这里:newComments=$(data.hide();服务器正在返回一个包含html的字符串。谢谢。。。这让我走上了正确的道路。最后我使用了:
newcommons.filter(.comment”).css('display','none')。这就成功了。有趣的是,在firefox中,
.hide()
在这种情况下不起作用。很高兴提供帮助。我必须深入研究jquery的本质才能弄明白这一点。不知道隐藏会有什么不同。通常,我倾向于在对元素执行任何操作(如隐藏)之前将元素附加到DOM。因此,这可能与分离元素的行为有关。我猜这是因为.hide()为.show()缓存元素的原始状态。从jquery.com:匹配的元素将立即隐藏,没有动画。这大致相当于调用.css('display','none'),只是display属性的值保存在jQuery的数据缓存中,以便以后可以将display恢复为其初始值。如果某个元素的显示值为inline,则隐藏并显示后,它将再次以inline显示。
$(data).find('.comment').hide()
[jquery-div, <TextNode textContent=" ">, jquery-div]