Функция ищет каждый класс с именем .resultsblock и, если виден, помещает данные в массив

Hiho, функция ищет каждый класс с именем .resultsblock и, если виден, помещает данные в массив.

Проблема в том, что когда первым классом является «display: block», все значения Futures возвращают true и будут помещены в массив, включая «display: none», и если первый класс «display: none», все значения возвращают 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/


person kardebadas    schedule 24.11.2016    source источник
comment
Значение атрибута id должно быть уникальным, наличие нескольких элементов с одинаковым id делает бесполезным поиск (найден только первый)   -  person Pablo Lozano    schedule 24.11.2016


Ответы (2)


Вы захватываете все блоки div .resultblock, а не только текущую итерацию. Я также рекомендую 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;
    }
  }
}
person Isak Berglind    schedule 24.11.2016

Прямо сейчас ваш оператор if повторно выбирает все div с классом resultblock, поэтому он всегда верен. Если вы измените оператор if с

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

to

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

вместо этого он проверит отображаемое значение элемента, на котором в данный момент выполняется итерация.

person Hyddan    schedule 24.11.2016