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]