2017-06-22 61 views
0

我想设置一个元素内容,以防它是空的。
html.erb代码如下:工作jQwwery代码不能在条件内工作

<div class="comments-section"> 
    <% if micropost.comments.any? %> 
    <ol id="comments_micropost-<%= micropost.id %>"> 
     <% micropost.comments.each do |comment| %> 
     <%= render comment %> 
     <% end %> 
    </ol> 
    <% end %> 
</div> 

元素我想设置内容为<div class="comments-section">。当微博尚未发表评论时,其内容为空。
我处理在create.js.erb的创建与JavaScript注释行动:我写了两行代码,这取决于micropost.comments是否是零或者不是零:

案例一:微柱还没有评论(micropost.comments.any?是假的) :

$('#micropost-<%= @micropost.id %>').find('.comments-section').html("<%= escape_javascript(render partial: 'comments/first_comment') %>"); 

案例2:微柱已经评论(micropost.comments.any?为true):

var comments = $('ol#comments_micropost-<%= @micropost.id %>'); 
comments.append('<%= escape_javascript(render partial: @comment) %>'); 

两者的代码段工作时分开使用。然而,当结合案例2在以下条件插入一组案例1的代码不起作用:

if (comments == null) { 
    $('#micropost-<%= @micropost.id %>').find('.comments-section').html("<%= escape_javascript(render partial: 'comments/comments') %>"); 
} 
else { 
    comments.append('<%= escape_javascript(render partial: @comment) %>'); 
}; 

为什么当不执行if (comments == null)的代码,我不明白。我也试过用if (comments == undefined)if (!comments)没有任何改进。
而是,条件的else部分已成功执行。

+0

对于'comments.blank?'或'comments =='''也没有改变。是'comments'来自'var comments':我如何表达等于0的长度? – Asarluhi

+1

@Asarluhi如果长度大于0,比可用。如果长度为0,则不可用。 – Vishal

+0

即使'if(comments.length === null)'不起作用。我不知道为什么,上述解决方案之一应该在这一点上起作用。 – Asarluhi

回答

1

JavaScript中不存在的DOM元素被视为length = 0的对象。可以通过使用Web浏览器控制台,编写DOM元素并检查控制台输出来验证这一点。选择一个没有评论的微博(例如id = 304微博):micropost.comments.any?将是错误的,并且div.comments-section内的所有内容都不会出现在文档中。在基于铬的浏览器在Firefox

  • Object { length: 0, prevObject: Object, context: HTMLDocument → 1, selector: "ol#comments_micropost-304" }
  • 原始

    1. []:在提示打开控制台和写入以下代码:

      $('ol#comments_micropost-304'); 
      

      的输出将是if声明不起作用,因为对象不为空并且有length = 0。因此,如果声明是正确的:if (comments.length == 0)