根据data- *属性控制div的显示

时间:2015-12-07 20:20:08

标签: javascript jquery html css

我在div列表中显示文章。每个div都有一个包含文章状态的数据属性。

<div id="article_1" data-status="read"> ... </div>
<div id="article_2" data-status="unread"> ... </div>

有一个按钮可切换视图以显示“所有文章”或仅显示“未读”文章。

我的切换功能看起来像这样,工作正常:

function toggle(status) {
    if (status == 'all') {
         $('*').filter(function() {
            if ($(this).data('status') == "read") {
                $(this)[0].style.display = 'block';
            }
         });  
    }
    else {
         $('*').filter(function() {
            if ($(this).data('status') == "read") {
                $(this)[0].style.display = 'none';
            }
         });
    }
}

问题 :是否有更好(更快,更有效)的方法来选择具有data-status属性的div并根据状态切换视图?

参考:

[1] Jquery select all elements that have $jquery.data()

[2] Show/hide multiple divs based on a value in their attribute

[3] filtering divs in jQuery and hiding them based on a custom data attribute tag

2 个答案:

答案 0 :(得分:3)

您只需选择data-status属性本身:

&#13;
&#13;
function toggle(status) {
    if (status == 'all') {
      $('[data-status=read]').css('display', 'block');
    }
    else {
      $('[data-status=read]').css('display', 'none');
    }
}

toggle('unread');
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="article_1" data-status="read"> read </div>
<div id="article_2" data-status="unread"> unread </div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

我认为你可以在这里变得非常简单:

function toggle(status) {
  if (status == 'all') {
    $('*[data-status="read"]').show();
  } else {
    $('*[data-status="read"]').hide();
  }
}

希望有所帮助