Saya memiliki kode ini yang membandingkan nilai dari satu tabel ke tabel lain dan menambahkan kelas jika ada, dan bagian itu berfungsi. Yang ingin saya lakukan sekarang adalah menunjukkan berapa kali nilai itu ada. Saya mencoba menghitung inkremental ++ tetapi jumlahnya tidak aktif.

function reporgs() {
  jQuery('#attendee01 tr:visible').each(function() {
 var count=0;
    var row = jQuery(this);
    var left_cols = jQuery(this).find("td:nth-child(3)");

    jQuery('#org01 tr').each(function() {

      var right_cols = jQuery(this).find("td:nth-child(1)");
      if (left_cols.html() == right_cols.html()) {
          count++;
        right_cols.css('color', 'red');
        right_cols.append(" <b>" + count + "</b>");
      }
    });
  });
}

Lihat biola https://jsfiddle.net/zjsLqxwp/1/

Terima kasih semuanya

1
bgunning 31 Januari 2020, 01:56

2 jawaban

Jawaban Terbaik

Bagaimana dengan pendekatan yang lebih sederhana? Mungkin cukup gunakan pemilih untuk mencocokkan elemen dan biarkan Javascript menghitung kemunculannya untuk Anda.

jQuery(document).ready(function() {
  jQuery("#org01 td").each(function() {
    var length = jQuery("#attendee01 td:contains(" + jQuery(this).html() + ")").length;
    if (length > 0) {
        jQuery(this).css("color","red");
        jQuery(this).append(" " + length);
    }
  });
});
0
ave4496 30 Januari 2020, 23:15

Anda memiliki loop yang salah bersarang. Pendekatan Anda harus mengulang-ulang org, dan untuk setiap org, hitung berapa banyak peserta yang ada:

jQuery(document).ready(function() {
  reporgs();
  //find represented sponsors
  function reporgs() {
    jQuery('#org01 tr').each(function() {
      var count=0;
      var right_cols = jQuery(this).find("td:nth-child(1)");
      jQuery('#attendee01 tr:visible').each(function() {
        var row = jQuery(this);
          var left_cols = jQuery(this).find("td:nth-child(3)");
        if (left_cols.html() == right_cols.html()) {
          count++;
        }
      });
      right_cols.css('color', 'red');
      right_cols.append(" <b>" + count + "</b>");
    });
  }
});

Namun, ini bukan pendekatan yang paling efisien, karena Anda mengulang n peserta untuk setiap m organisasi, membuat kompleksitas waktu O(n*m). Sebagai gantinya, Anda dapat membuat ini linier dengan mengulang peserta sekali saja, sambil menghitung jumlah total organisasi. Kemudian, Anda dapat mengulang org sekali saja dan mengeluarkan penghitungan yang telah dihitung:

jQuery(document).ready(function() {
  const counts = {};
  jQuery('#attendee01 tr:visible').each(function() {
    const org = jQuery(this).find("td:nth-child(3)").text();
    counts[org] = (org in counts) ? (counts[org] + 1) : 1;
  });

  jQuery('#org01 tr').each(function() {
    const right_col = jQuery(this).find("td:nth-child(1)");
    const org = right_col.text();
    const count = counts[org] || 0;
    right_col
      .css('color', 'red')
      .append(" <b>" + count + "</b>");
  });
});
0
Jacob 30 Januari 2020, 23:14