工作jQwery代码不在条件内工作
我想设置一个元素内容,以防它是空的。
html.erb
代码如下:
<ol id="comments_micropost-">
我想要设置内容的元素是
。 当微博尚未发表评论时,其内容为空。
我在
我在
create.js.erb
使用javascript处理注释的创建操作:我写了两行代码,这取决于micropost.comments
是否为nil或者它不是nil:
案例1:micropost还没有评论( micropost.comments.any?
是假的):
$('#micropost-').find('.comments-section').html("");
案例2:micropost已经发表评论( micropost.comments.any?
是真的):
var comments = $('ol#comments_micropost-'); comments.append('');
两个代码在单独使用时都有效。 但是,在以下条件中与案例2一起插入时,案例1的代码不起作用:
if (comments == null) { $('#micropost-').find('.comments-section').html(""); } else { comments.append(''); };
我不明白为什么if (comments == null)
代码没有被执行。 我也试过if (comments == undefined)
和if (!comments)
没有任何改进。
相反,条件的else
部分已成功执行。
JavaScript将不存在的DOM元素视为length = 0
的对象。 可以通过使用Web浏览器控制台,编写DOM元素并检查控制台输出来validation这一点。 选择没有评论的微博(比如说id = 304
micropost.comments.any?
): micropost.comments.any?
将是错误的, div.comments-section
内的div.comments-section
都不会出现在文档中。 打开控制台并在提示符下编写以下代码:
$('ol#comments_micropost-304');
输出将是:
-
[]
在基于Chromium的浏览器中 -
Object { length: 0, prevObject: Object, context: HTMLDocument → 1, selector: "ol#comments_micropost-304" }
原始if
语句不起作用,因为该对象不为null且length = 0
。 因此,if语句是: if (comments.length == 0)