如果元素在数组中具有属性值,则隐藏元素

时间:2015-05-29 01:02:05

标签: javascript jquery arrays

我想要实现的是隐藏特定的div,如果它的指定属性与数组中的值匹配。

正在使用的信息将是动态的,需要隐藏的div可能会发生变化。因此它必须是可扩展的。

到目前为止我所拥有的是抓取属性并将它们放入数组中。然后我将放入该数组的内容与另一个指定div需要隐藏的数组进行匹配。如果divs属性匹配,则隐藏div,否则让div渲染。

现在我在隐藏div时得到全部或全部。

这是代码

var matching = ['2', '3'];
var mids = [];


$('.merch-tile').each(function(i, e) {
  mids.push($(e).attr('m_mid'));
});
//alert(mids);


for (var c1 = 0; c1 < mids.length; c1++) {

  //alert('running');
  var nm_arg = matching[c1];

  //alert('still running');

  if ($.inArray(nm_arg, mids) === -1)
    $('.merch-tile').hide();

  alert('something matches');

}

$(document.body).append(mids);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="merch-tile" m_mid="1">Tile 1</div>
<div class="merch-tile" m_mid="2">Tile 2</div>
<div class="merch-tile" m_mid="3">Tile 3</div>

3 个答案:

答案 0 :(得分:0)

你可以

var matching = ['2', '3'];  

$('.merch-tile').filter(function (i, e) {
    return matching.indexOf($(this).attr('m_mid')) > -1
}).hide();

&#13;
&#13;
var matching = ['2', '3'];

$('.merch-tile').filter(function (i, e) {
    return matching.indexOf($(this).attr('m_mid')) > -1
}).hide();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="merch-tile" m_mid="1">Tile 1</div>
<div class="merch-tile" m_mid="2">Tile 2</div>
<div class="merch-tile" m_mid="3">Tile 3</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

不需要mids数组。只需遍历DOM元素,测试属性是否在数组中。

我最后也不了解$(document.body).append(mids) - mids不是HTML,它是一个数组。

我还用data-mid替换了您的自定义属性。 data-XXX属性保留给程序员用作扩展名。

如果要隐藏数组中 的DIV,则应测试!= -1,而不是== -1

&#13;
&#13;
var matching = ['2', '3'];
var something_matches = false;

$('.merch-tile').each(function() {
  if ($.inArray($(this).attr('data-mid'), matching) != -1) {
    $(this).hide();
    something_matches = true;
  }
});

if (something_matches) {
  alert('something matches');
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="merch-tile" data-mid="1">Tile 1</div>
<div class="merch-tile" data-mid="2">Tile 2</div>
<div class="merch-tile" data-mid="3">Tile 3</div>
&#13;
&#13;
&#13;

谨防使用.data('mid')代替.attr('data-mid').data()以整数形式返回值,因为有效JSON的属性值被解析为JSON,但matching包含字符串。

答案 2 :(得分:-1)

看看你的代码:

if ($.inArray(nm_arg, mids) === -1)
    $('.merch-tile').hide(); // Look at here,you hide all, because of your have class name

alert('something matches');