正在运行的jQuery代码在条件内不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正在运行的jQuery代码在条件内不起作用相关的知识,希望对你有一定的参考价值。

我想设置一个元素内容,以防为空。html.erb代码如下:

<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是nil还是nil:

案例1:微博尚未发表评论(micropost.comments.any?为假):

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

案例2:micropost已经发表评论(micropost.comments.any?是真的):

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部分已成功执行。

答案

JavaScript将不存在的DOM元素视为带有length = 0的对象。可以通过使用Web浏览器控制台,编写DOM元素并检查控制台输出来验证这一点。选择一个无注释的微博(例如带id = 304的微博):micropost.comments.any?为假,div.comments-section内部的所有内容都不会出现在文档中。打开控制台,并在提示符下输入以下代码:

以上是关于正在运行的jQuery代码在条件内不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Javascript代码片段在drupal中不起作用

Jquery .removeClass 在 setTimeout 内不起作用

扑。列 mainAxisAlignment spaceBetween 在 Row 内不起作用

覆盖在swift中的扩展对象内不起作用

覆盖在swift中的扩展对象内不起作用

MPDF div在表格内不起作用