【问题标题】:Filter out undefined inside a loop with find使用 find 过滤掉循环内的未定义
【发布时间】:2017-04-02 00:13:15
【问题描述】:

如果我从循环中删除div id,我会得到一个未定义的。

HTML:

为了论证,这是一个循环(两次)

<div class="card">
 <canvas class="chart-class" id="chart_<%=model.id%>" width="400" height="200"></canvas>
<div>
<div class="card">
 <% if 1 == 2 %>
   <canvas class="chart-class" id="chart_<%=model.id%>" width="400" height="200">
 <% else %>
   No chart to display
 <% end %>
<div>

JavaScript:

$('.card').each(function() {
  let demo =  $(this).find('.foo').attr('id');
  console.log(demo);
});

这会给我身份证号码。如果我删除 id 为 1 或 2 的 div,我会在控制台中得到 undefined,但会得到最后一个 id 号。我需要防止这种情况发生:

$('.card').filter(undefined, function() {...});

没有显示。这个怎么办?

编辑:

我正在显示cart.js 来代替上面的div class="foo"。我确实有两个循环,但大多数时候只有一个图表会出现。在我的 js 中:

$('.card').each(function() {
 let chartId = $(this).find('.chart-class').attr('id');
 let ctx =  $(`#${chartId}`);

  [// chart data]
});

【问题讨论】:

  • dom 加载后你找到了吗?
  • 你到底想达到什么目的?
  • 好的,我会准确的。让我更新帖子。
  • “如果我删除 id 为 1 或 2 的 div”:向我们展示该代码;换句话说,提供一个完整的例子。
  • @JeroenHeier 好了,在 Rails 中。

标签: javascript jquery ruby ruby-on-rails-5


【解决方案1】:
$('.card').each(function() {    

    let demo =  $(this).find('.foo');

    if(demo.length){
        console.log(demo.attr('id'));
    }
}

如果找到类名为foo的元素,它将尝试获取id属性,如果没有,它将跳过该元素并且不会返回undefined

【讨论】:

    【解决方案2】:

    首先,要检查未定义,您需要编写

    typeof blah == 'undefined'
    

    其次,我不完全确定你想要的效果是什么,但你可以使用类似下面的东西

    $('.card').each(function(){
             var fooId = ....find foo id;
              if (typeof fooId != 'undefined') {
                  console.log(fooId);
              }
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多