javascript - 如何隐藏/显示基于数组的元素?

标签 javascript jquery arrays

我需要根据用户选择的标签过滤表格中的行。

我使用标签数组来定位行的类别,我试图隐藏 sibling 但它不起作用,如果有不止一行,它会隐藏所有内容,如果用户删除一个标签,我需要重新显示其他行,但我没能找到如何做到这一点。

(function($, root, undefined) {

  $(function() {

    'use strict';

    // Disponibilités

    $('.ui.dropdown').dropdown();

    $('.dropdown').on('click', function(e) {
      var filters = $("input[name='filters']").val();
      var arrayFilters = filters.split(',');
      if (filters) {
        $.each(arrayFilters, function(index, value) {
          $('.' + value).siblings().hide();
        });
      } else {
        $('.uniteRow').show();
      }
    });

  });

})(jQuery, this);
<!DOCTYPE html>
<html>

<head>
  <style>
    table td {
    padding: 5px;
  }
  </style
</head>

<body>
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.2/semantic.min.css" rel="stylesheet" type="text/css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.2/semantic.min.js"></script>


  <div class="filters">
    <div class="ui multiple dropdown">
      <input type="hidden" name="filters">
      <i class="filter icon"></i>
      <span class="text">Filter les résultats</span>
      <div class="menu">
        <div class="divider"></div>
        <div class="header">
          Disponibilité
        </div>
        <div class="scrolling menu">
          <div class="item" data-value="disponiblebientot">
            Disponible bientôt
          </div>
          <div class="item" data-value="juillet2020">
            Juillet 2020
          </div>
          <div class="item" data-value="loue">
            Loué
          </div>
        </div>
        <div class="divider"></div>
        <div class="header">
          Pièces
        </div>
        <div class="scrolling menu">
          <div class="item" data-value="pieces3">
            3 ½
          </div>
          <div class="item" data-value="pieces4">
            4 ½
          </div>
          <div class="item" data-value="pieces5">
            5 ½
          </div>
        </div>
      </div>
    </div>
  </div>

  <table class="disponibilites">
    <tbody>
      <tr>
        <td></td>
        <td>Pièces</td>
        <td>Disponibilité</td>
      </tr>
      <tr class="uniteRow loue pieces4">
        <td>101</td>
        <td>4½</td>
        <td>Loué</td>
      </tr>
      <tr class="uniteRow disponiblebientot pieces4">
        <td>102</td>
        <td>4½</td>
        <td>Disponible bientôt</td>
      </tr>
      <tr class="uniteRow loue pieces4">
        <td>103</td>
        <td>4½</td>
        <td>Loué</td>
      </tr>
      <tr class="uniteRow loue pieces3">
        <td>104</td>
        <td>3½</td>
        <td>Loué</td>
      </tr>
      <tr class="uniteRow loue pieces3">
        <td>105</td>
        <td>3½</td>
        <td>Loué</td>
      </tr>
      <tr class="uniteRow juillet2020 pieces3">
        <td>106</td>
        <td>3½</td>
        <td>Juillet 2020</td>
      </tr>
      <tr class="uniteRow juillet2020 pieces4">
        <td>718</td>
        <td>4½</td>
        <td>Juillet 2020</td>
      </tr>
    </tbody>
  </table>

</body>

</html>

所以我只想显示该类在 arrayFilters 中的行,并隐藏那些不存在的行,并且我希望它在每次选择/取消选择标签时更新。

最佳答案

所以我修改了我的代码以循环遍历行而不是数组,并将数据值更改为类以使用 .is()

我检查每行是否在过滤器中有一个类并显示它,如果没有类与过滤器匹配则隐藏该行。

(function ($, root, undefined) {

	$(function () {
		
		'use strict';
		
		// Disponibilités
		
		$('.ui.dropdown').dropdown();
		
		$('.dropdown').on('click', function(e) {
			var filters = $( "input[name='filters']" ).val();
			if(filters) {
                $('.uniteRow').each(function (index, value) {
                    if($(this).is(filters)) {
                      $(this).show();
                    } else {
                      $(this).hide();
                    }
                });
			} else {
				$('.uniteRow').show();
			}
		});
		
	});
	
})(jQuery, this);
<!DOCTYPE html>
<html>

<head>
  <style>
    table td {
    padding: 5px;
  }
  </style
</head>

<body>
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.2/semantic.min.css" rel="stylesheet" type="text/css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.2/semantic.min.js"></script>


 <div class="filters">
	<div class="ui multiple dropdown">
		<input type="hidden" name="filters">
		<i class="filter icon"></i>
		<span class="text">Filter les résultats</span>
		<div class="menu">
			<div class="divider"></div>
			<div class="header">
				Disponibilité
			</div>
			<div class="scrolling menu">
				<div class="item" data-value=".disponiblebientot">
					Disponible bientôt
				</div>
				<div class="item" data-value=".juillet2020">
					Juillet 2020
				</div>
				<div class="item" data-value=".loue">
					Loué
				</div>
			</div>
            <div class="divider"></div>
			<div class="header">
				Pièces
			</div>
			<div class="scrolling menu">
				<div class="item" data-value=".pieces3">
					3 ½
				</div>
				<div class="item" data-value=".pieces4">
					4 ½
				</div>
				<div class="item" data-value=".pieces5">
					5 ½
				</div>
			</div>
		</div>
	</div>
</div>
  
<table class="disponibilites">
	<tbody>
		<tr>
			<td></td>
			<td>Pièces</td>
			<td>Disponibilité</td>
		</tr>
		<tr class="uniteRow loue pieces4">
			<td>101</td>
			<td>4½</td>
			<td>Loué</td>
		</tr>
		<tr class="uniteRow disponiblebientot pieces4">
			<td>102</td>
			<td>4½</td>
			<td>Disponible bientôt</td>
		</tr>
		<tr class="uniteRow loue pieces4">
			<td>103</td>
			<td>4½</td>
			<td>Loué</td>
		</tr>
		<tr class="uniteRow loue pieces3">
			<td>104</td>
			<td>3½</td>
			<td>Loué</td>
		</tr>
		<tr class="uniteRow loue pieces3">
			<td>105</td>
			<td>3½</td>
			<td>Loué</td>
		</tr>
		<tr class="uniteRow juillet2020 pieces3">
			<td>106</td>
			<td>3½</td>
			<td>Juillet 2020</td>
		</tr>
		<tr class="uniteRow juillet2020 pieces4">
			<td>718</td>
			<td>4½</td>
			<td>Juillet 2020</td>
		</tr>
	</tbody>
</table>

</body>

</html>

关于javascript - 如何隐藏/显示基于数组的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57187621/

相关文章:

javascript - 当用户单击后退按钮时让 DataTables 保持其状态(没有 stateSave 选项)

javascript - 填写值后输入文本框时未触发提交。在IE中

python - 根据阈值拆分 numpy 数组的更快方法

arrays - 使用 MongoDB 查找最相似的数组

c# - IE 11 打开旧的覆盖的 PDF 而不是新的 PDF?

javascript - react 导航 : 'navigation.state.params' is always undefined in 'static navigationOptions'

javascript - 交易 View 绘图

javascript - 这个 for 循环和计时器有什么问题?

jquery - "nested"MVC 中的表单

c - 动态分配 - 用户在运行前不知道数组大小的情况下输入元素