javascript - 如何使用 jquery/javascript 过滤列表

标签 javascript jquery

我有一个 html,我可以在其中根据他们的数据进行过滤,但我不知道如何组合它。

这是我的脚本,搜索名称已经可以使用,但是单选按钮 isActive 仍然无法使用,需要添加到我的过滤器中。我不知道如何过滤它。

$('input[type=text][name=search_name').on('input', function(e) {
  e.stopPropagation();
  e.preventDefault();

  var fullname = $(this).val();
  var isActive = $('input[type=radio][name=isActive]').val();
  searchStudent(fullname, isActive);
});

$('input[type=radio][name=isActive]').on('change', function(e) {
  e.stopPropagation();
  e.preventDefault();

  var fullname = $('input[type=text][name=search_name').val();
  var isActive = $(this).val();
  searchStudent(fullname, isActive);
});

function searchStudent(fullname, isActive) {
  $("ul li").each(function() {
    // I don't know how to add the isActive
    if ($(this).data('fullname').search(new RegExp(fullname, "i")) < 0) {
      $(this).hide();
    } else {
      $(this).show();
    }
  });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <input type="text" name="search_name">
  <span><input type="radio" checked="" autocomplete="off" value="2" name="isActive"> All</span>
  <span><input type="radio" autocomplete="off" value="1" name="isActive"> Active</span>
  <span><input type="radio" autocomplete="off" value="0" name="isActive"> Inactive</span>
</div>

<ul>
  <li data-fullname="Jerald Patalinghug" data-firstname="Jerald" data-lastname="Patalinghug" data-isActive="1">Jerald Patalinghug</li>
  <li data-fullname="Eldrin Gok-ong" data-firstname="Eldrin" data-lastname="Gok-ong" data-isActive="1">Eldrin Gok-ong</li>
  <li data-fullname="Uelmar Ortega" data-firstname="Uelmar" data-lastname="Ortega" data-isActive="0">Uelmar Ortega</li>
</ul>

所以当我选择all = 2时,我会看到所有人,active = 1我会看到活跃的,然后是inActive = 0 查看不活跃的人。

最佳答案

我建议使用一个 update 函数,当输入或 textField 都发生变化时调用该函数。 在此 update 函数中,您将查询选中的复选框和文本字段。

其他解决方案将意味着记录选择的值或预先选择相关元素以避免每次都查询 DOM,但在我看来,这是不值得的。

$('input[type=text][name=search_name').on('input', updateFilter);
$('input[type=radio][name=isActive]').on('change', updateFilter);

function updateFilter(){
  var fullname = $('input[type=text][name=search_name').val();
  var isActive = $('input[type=radio][name=isActive]:checked').val();
  searchStudent(fullname, +isActive);
}

function searchStudent(fullname, isActive) {
  $("ul li").each(function() {
    if ($(this).data('fullname').search(new RegExp(fullname, "i")) < 0
         || isActive !== 2 && +$(this).data('isactive') !== isActive) {
      $(this).hide();
    } else {
      $(this).show();
    }
  });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <input type="text" name="search_name">
  <span><input type="radio" checked="true" autocomplete="off" value="2" name="isActive"> All</span>
  <span><input type="radio" autocomplete="off" value="1" name="isActive"> Active</span>
  <span><input type="radio" autocomplete="off" value="0" name="isActive"> Inactive</span>
</div>

<ul>
  <li data-fullname="Jerald Patalinghug" data-firstname="Jerald" data-lastname="Patalinghug" data-isActive="1">Jerald Patalinghug</li>
  <li data-fullname="Eldrin Gok-ong" data-firstname="Eldrin" data-lastname="Gok-ong" data-isActive="1">Eldrin Gok-ong</li>
  <li data-fullname="Uelmar Ortega" data-firstname="Uelmar" data-lastname="Ortega" data-isActive="0">Uelmar Ortega</li>
</ul>

关于javascript - 如何使用 jquery/javascript 过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607702/

相关文章:

javascript - 注入(inject)的 Javascript 似乎异步运行

javascript - 每行的子列相等

javascript - 变量返回未定义的Javascript

javascript - 我什么时候需要使用 super(props) 将 prop 传递给 React 组件的构造函数?

javascript - 在执行一个函数后运行 jquery 函数

javascript - Jquery Mobile 中心并使用带有 3 个按钮的全屏宽度

javascript - 如何使用 React-Leaflet 获取标记集合的边界

jquery - jqGrid - 如何向网格添加自定义属性

javascript - 在javascript中构建参数数组

jquery - rails 3 : How to make the user choose at least one checkbox in a form?