函数搜索每个 class 名称为 .resultsblock 的函数,如果可见,则将数据放入数组中

A function search every class with name .resultsblock and if is visible put a data in array

嗨, 函数搜索名称为 .resultsblock 的每个 class,如果可见,则将数据放入数组中。

问题是当第一个 class 是 "display: block" 所有期货值 return true 并且将被放入数组中时,包括 "display:none" 并且如果第一个是 "display: none" 所有值 return false...

<div id="measure_print" class="resultblock" data-nid="900"  style="display: block;"> 
  <p>blablalblabla</p>
</div>
<div id="measure_print" class="resultblock" data-nid="988"  style="display: none;"> 
  <p>blablalblabla</p>
</div>
<div id="measure_print" class="resultblock" data-nid="999" style="display: none;"> 
  <p>blablalblabla</p>
</div>



<button type="button" onClick = "cartAction('addall','')" >Add All</button>



function cartAction(action,nID) {
  var nidarr = [];
  if(action != "") {
    switch(action) {
      case "addall":
        $.each($('.resultblock'), function(index, value) {
          var temp = parseInt($(value).data('nid'));
          var query = $('#measure_print');


          if ($('.resultblock').css('display') !== 'none') {
            nidarr.push(temp);
            console.log(temp);
          }
        });
        console.log(nidarr);
        break;
    }
  }
}

我做了自己的解决方案 -->

现场演示https://jsfiddle.net/kardebadas/j3f9scet/3/

现在您的 if 语句正在使用结果块 class 重新选择所有 div,这就是为什么它始终为真。如果您将 if 语句从

if ($('.resultblock').css('display') !== 'none') {

if ($(value).css('display') !== 'none') {

它将检查迭代当前所在元素的显示值。

您正在抓取所有 .resultblock div 而不是仅抓取当前迭代。我还推荐 jquerys is('visible') 以获得更简洁的代码:)

function cartAction(action,measure_N_ID) {
  var nidarr = [];
  if(action != "") {
    switch(action) {
      case "addall":
        $.each($('.resultblock'), function(index, value) {
          var temp = parseInt($(value).data('nid'));
          var query = $('#measure_print');


          if ($(this).is(':visible')) {
            nidarr.push(temp);
            console.log(temp);
          }
        });
        console.log(nidarr);
        break;
    }
  }
}