如何在添加到DOM之前将Jquery用于隐藏的隐藏元素?

时间:2010-12-23 16:44:34

标签: javascript dom jquery

我觉得这很简单。但是,事实证明并非如此。我正在使用此代码:

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

此脚本将评论发布到服务器。服务器使用标记形式回复发布的评论,以及自用户发布页面以来发布的任何评论。

当服务器返回单个注释的标记时,它的效果很好。当服务器响应多个评论时,firefox会打一个垫片。我收到此JavaScript错误:

  

错误:未捕获异常:[例外...“无法转换JavaScript参数arg 0 [nsIDOMViewCSS.getComputedStyle]”nsresult:“0x80570009(NS_ERROR_XPC_BAD_CONVERT_JS)”位置:“JS frame :: http://localhost:3437/Scripts/jquery-1.4.1.min.js :: anonymous ::第130行“数据:否]

这个错误即将来自jQuery核心,我不确定是什么触发了它。我知道如果我删除.hide().slideDown()并且只是添加标记,那么它可以毫无障碍地工作。但我想要花哨的slideDown动画: - )

有什么建议吗?

修改

以下是服务器响应的示例:

<div class="comment" style="background:#eee; border:1px solid gray; padding:10px 10px 0 10px; margin-bottom:20px;">
    <h4 id="94">Admin commented on Thursday, December 23, 2010 10:21 AM</h4>
    <p>
    asd
    </p>
</div>

<div class="comment" style="background:#eee; border:1px solid gray; padding:10px 10px 0 10px; margin-bottom:20px;">
    <h4 id="105">Owner commented on Thursday, December 23, 2010 10:27 AM</h4>
    <p>
    asd
    </p>
</div>

<div class="comment" style="background:#eee; border:1px solid gray; padding:10px 10px 0 10px; margin-bottom:20px;">
    <h4 id="106">Admin commented on Thursday, December 23, 2010 10:27 AM</h4>
    <p>
    asd
    </p>
</div>

2 个答案:

答案 0 :(得分:2)

啊,而不是做$(数据).hide()做

$(data).find('.comment').hide()

或者     $(数据).find(&#39;的.comment&#39;)ATTR(&#39;风格&#39;,&#39;显示:无&#39)。

当然第二个会覆盖你的样式属性。你可以将整个东西包裹在一个span或div中。

答案 1 :(得分:0)

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

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

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