jQuery:如何使用data属性循环遍历元素

yes*_*man 13 javascript jquery html5

我有几个看起来像这样的div:

<div class='popupDiv' data-layergroup='layer1'>divcontent 1</div>
<div class='popupDiv' data-layergroup='layer1'>divcontent 2</div>
<div class='popupDiv' data-layergroup='layer2'>divcontent 3</div>
<div class='popupDiv' data-layergroup='layer2'>divcontent 4</div>
Run Code Online (Sandbox Code Playgroud)

关于如何遍历所有popupDiv div,然后分别遍历每个图层组,我有点难过.我想以每个图层组的单个数组结束.我需要这样的东西:

var mainArray = [];
$('.popupDiv').each(function(){
    var tempArray = [];
    $([unique layer value]).each(function(){
        // Put div values from layergroup in tempArray
    });
    mainArray.push(tempArray);
});
return mainArray;
Run Code Online (Sandbox Code Playgroud)

但我不知道我正在寻找的语法.我该怎么办?

Bhu*_*kar 25

<div class='popupDiv' data-layer='layer1'></div>
<div class='popupDiv' data-layer='layer1'></div>
<div class='popupDiv' data-layer='layer2'></div>
<div class='popupDiv' data-layer='layer2'></div>
Run Code Online (Sandbox Code Playgroud)

循环遍历元素

$('.popupDiv[data-layer]').each(function(){

});
Run Code Online (Sandbox Code Playgroud)

单独循环遍历每个组,您可以使用以下逻辑

 //create an array to store processed data-layer type
 var dataArray = new Array();
    $('.popupDiv').each(function(){
      var dataLayer = $(this).data('layer');
      //check if data-layer already processed
      if(!dataArray.indexOf(dataLayer))
      {
         //update data array
         dataArray.push(dataLayer);
         $('.popupDiv[data-layer="'+ dataLayer +'"]').each(function(){
            //do your stuff here
         });
      }
    });
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这对我有用.我确实需要稍微编辑它:if(dataArray.indexOf(dataLayer)<0)对我来说效果更好. (2认同)

Wis*_*abs 5

您可以循环遍历具有属性"data-layer"的每个div,如下所示:

$('.popupDiv').each(function(i) {
        if ($(this).attr('data-layer') == 'layer' + i + 1) {

            $(this).each(function() {
                alert($(this).attr('data-layer'));
                //change this to whatever you want
            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

所以这将检查'layer1','layer2'等等.