Saya sedang menulis fungsi pemfilteran, di mana saya perlu memilih elemen yang memiliki nilai tertentu dalam atribut datanya, dan nilai-nilai itu termasuk dalam array, izinkan saya menjelaskannya dalam sebuah contoh:

Misalnya, saya memiliki tiga elemen dan tombol sebagai berikut:

<div data-foo="aa,cc,ff" ></div>
<div data-foo="bb,cc,ff" ></div>
<div data-foo="bb,dd,ee" ></div>

<div class="button" data-boo="aa,ff" ></div>

Data-foo di setiap elemen berisi nilai yang dipisahkan koma. Ketika saya mengklik tombol, saya membuat array (myArray dalam kode di bawah) dari atribut datanya, maka saya harus memilih elemen-elemen yang setidaknya salah satu nilainya di dalamnya myArray ada di mereka data-foo, untuk penjelasan yang jelas silakan lihat kode di bawah ini:

$( ".button" ).click(function() {

     // First I make an array from the button's data attribute 
     var myArray = $(this).data('boo').split(',');


     // Select should be elements that their da-foo has at least one 
     // — of values in the array above
     var Select = "?"

});

Bagaimana variabel Select dapat menargetkan dua elemen pertama, karena elemen pertama memiliki "aa" dan "ff", dan elemen kedua memiliki "ff".

Saya benar-benar mencoba menjelaskannya dengan cara yang masuk akal, jika tidak cukup jelas, beri tahu saya dan saya akan dengan senang hati menjelaskan lebih lanjut, terima kasih.

1
Bondsmith 15 Agustus 2017, 19:36

2 jawaban

Jawaban Terbaik

Anda dapat menggunakan Pemilih Berisi Atribut:

$( ".button" ).click(function() {
    // First I make an array from the button's data attribute 
    var myArray = $(this).data('boo').split(',');

    // produces array of strings like '[data-foo*="aa"]'
    var selectors = myArray.map(function(value) {
        return '[data-foo*="' + value + '"]';
    });
    // searches by selectors joined by comma, returns all elements
    // that satisfy at least one selector
    var selectedElements = $(selectors.join(','));
});
2
Mikalai Ziuz 15 Agustus 2017, 16:48

Mari gunakan Array.prototype.some untuk ini:

$(".button").click(function() {

  // First I make an array from the button's data attribute 
  var myArray = $(this).data('boo').split(',');


  // Select should be elements that their da-foo has at least one 
  // — of values in the array above
  var Select = $("div[data-foo]"); //select all elements with data-foo
  Select.each(function(index, element) {
    var isInMyArray = $(element).data("foo").split(",").some(function(element) {

     if ( myArray.indexOf(element) != -1)
      {return true;}//if true then element is in myArray

    }); //using some here - if one value is found in array return true.
    console.log(isInMyArray);
  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-foo="aa,cc,ff"></div>
<div data-foo="bb,cc,ff"></div>
<div data-foo="bb,dd,ee"></div>

<div class="button" data-boo="aa,ff">test</div>
0
Mouser 15 Agustus 2017, 16:55