Javascript JQuery可以在新类出现时检测它们吗?例如,刚刚发布的新评论
我有一个micropost/评论系统,每次提交新的micropost或评论时,页面都会刷新以显示它 因为我已经在我的表单上设置了ajax,所以我现在希望在不刷新页面的情况下添加micropost或 到目前为止,我已经:Javascript JQuery可以在新类出现时检测它们吗?例如,刚刚发布的新评论,javascript,ajax,jquery,Javascript,Ajax,Jquery,我有一个micropost/评论系统,每次提交新的micropost或评论时,页面都会刷新以显示它 因为我已经在我的表单上设置了ajax,所以我现在希望在不刷新页面的情况下添加micropost或 到目前为止,我已经: if @micropost.save format.js { render :post_on_wall } else format.js { render :form_errors } end 您不需要成为RubyonRails专家就可以理解这段代码中的内容。如
if @micropost.save
format.js { render :post_on_wall }
else
format.js { render :form_errors }
end
您不需要成为RubyonRails专家就可以理解这段代码中的内容。如果表单通过了所有验证,并且用户在单击post之前实际键入了一些有效的内容,那么“If@micropost.save”将为true,它将在我命名为“post_on_wall”的文件中执行js。如果“@microspost.save”,将执行“form_errors”中的代码
在form_错误中,我添加了一个警报,以检查当用户输入nothing并单击post时,micropost不会被发布。它很好用
在“墙上张贴”文件中,我有以下内容:
$('.microposts').prepend('<%= j render("users/partials/microposts") %>');
$('.microposts')。前置('');
问题是,它基本上会抓住文件中循环的所有微操作,这些文件被呈现为“users/partials/micropost”,然后将它们放在“.micropost”分区中的所有内容之上。即使是实际的表单,也会在“.micropost”的顶部发布一个micropost在刚刚添加到页面的内容下方向下推
这是我的html结构
<div class='cf' id='content'>
<div id='leftColumn'>
</div>
<div class='microposts'>
</div>
<div id='rightColumn'>
</div>
</div>
每个micropost及其相关注释都存储在一个名为“.postHolder”的类中
我觉得我走错了方向。“users/partials/microspots”指向的文件基本上有代码可以帮助一次显示10个microspots。这是用于完全不同于我试图做的事情(分页+无休止的滚动)
不管怎样,我觉得我应该做的是如何检测刚刚发布的新帖子。它应该被检测为一个新的“.postHolder”类,然后在找到它之后,它应该被添加到“postHolder”列表的顶部,而不是替换它上面的micropost表单
我想创建一个单独的div来保存所有的micropost,然后把这个div放在micropost表单下面。。这样,我就不必担心表单会被压下,因为它不会在包含所有微操的div中,而事实上,我将准备使用这些微操
无论如何,我真的很想有一个例子或一些好的建议,可以帮助我实现这个功能
谢谢你的时间
问候。回答标题问题“JQuery可以在新类出现时检测它们吗?”:否 将新元素添加到页面时会触发一些事件(
domandeinsertedintodocument
),但这绝对是低效的(而且不推荐使用)
最好在添加新元素的代码中使用jQuery的方法触发自定义事件。这样,您就可以通知独立模块有新元素
但是,当您在新元素上寻找事件处理程序注册时,您可能应该看看jQuery的方法。基于您所做的假设
<div id='microposts'>
<form id='new_post'></form>
<div class='postholder' id='some-id-number'></div>
<div class='postholder' id='some-older-id-number'></div>
...
</div>
您还可以使用setTimeout作为心跳信号,每隔一段时间调用getNewposts。那么您的问题是在DOM中插入micropost的位置?为什么不在
.postHolder
前面加上前缀呢?因为.postHolder是一个包含每个micropost的类。这只会将所有通过microposts的循环添加到页面上的.postHolder类中。d_不可避免:我试图做的是通过它的类检测新发布的评论,然后对其进行预处理。是否会筛选。postHolder
仅显示最后的x篇帖子对您有帮助?或者给每篇文章一个唯一的id?.live在最新版本的jQuery中是不推荐的。“从jQuery 1.7开始,.live()方法已被弃用。请使用.on()附加事件处理程序。较旧版本的jQuery用户应优先使用.delegate(),而不是.live()。”是的,对于live(),我指的是on()+子代选择器。但是live()是关于这个概念的,您不需要jQuery来应用它,这似乎是一个很好的解决方案。我原本以为使用id会很好,但只是不知道如何使用。我会仔细阅读,看看这是否有助于解决我的问题。
function getNewPosts(){
$.ajax({
url: 'Your-New-Posts-Url',
data: {lastId: $('.postholder:first').attr('id')},
success: function(newPosts){
if(newPosts && newPosts.length > 0){
$('.postholder:first').before(newPosts);
}
}
});
}