原生JS实现多条件筛选

yizhihongxing

原生JS实现多条件筛选的完整攻略如下:

1. HTML结构

首先,我们需要搭建HTML结构,例如:

<div>
  <label for="input1">条件1:</label>
  <input type="text" id="input1">
</div>
<div>
  <label for="input2">条件2:</label>
  <input type="text" id="input2">
</div>
<div>
  <label for="input3">条件3:</label>
  <input type="text" id="input3">
</div>
<button id="btn">筛选</button>
<ul id="list">
  <li>内容1</li>
  <li>内容2</li>
  <li>内容3</li>
  ...
</ul>

在这个HTML结构中,我们使用了 label 元素和 input 元素,用于表示多个筛选条件的输入框;还增加了一个 button 元素,通过点击按钮实现筛选功能;最后是一个 ul 元素,用于呈现筛选后的结果列表。

2. JavaScript实现

接下来,我们使用JavaScript实现多条件筛选的功能。

我们可以通过给上述 input 元素添加一个 class 属性来进行选择,例如:

<div>
  <label for="input1">条件1:</label>
  <input type="text" id="input1" class="filter">
</div>
<div>
  <label for="input2">条件2:</label>
  <input type="text" id="input2" class="filter">
</div>
<div>
  <label for="input3">条件3:</label>
  <input type="text" id="input3" class="filter">
</div>
<button id="btn">筛选</button>
<ul id="list">
  <li data-name="内容1" data-type="A">内容1</li>
  <li data-name="内容2" data-type="B">内容2</li>
  <li data-name="内容3" data-type="A">内容3</li>
  ...
</ul>

在上述HTML结构中,我们为每一个 li 元素添加了两个自定义属性:data-namedata-type,用于表示不同类型的内容。接下来,我们使用JavaScript代码来实现筛选功能:

const btn = document.querySelector('#btn');
const filters = document.querySelectorAll('.filter');
const list = document.querySelector('#list').children;

btn.addEventListener('click', () => {
  const filterValues = Array.from(filters).map(filter => filter.value.trim().toLowerCase());

  Array.from(list).forEach(item => {
    const name = item.getAttribute('data-name').toLowerCase();
    const type = item.getAttribute('data-type').toLowerCase();
    const show = filterValues.every(filterValue => name.includes(filterValue) || type.includes(filterValue));
    item.style.display = show ? 'block' : 'none';
  });

});

上述代码解析:

  • 首先,我们使用 querySelectorquerySelectorAll 方法选择需要的元素,分别为:button 元素,所有带有 .filter 类的 input 元素,和 ul 元素下的子元素 li

  • 接下来,我们为 button 元素添加 click 事件监听器,用于实现筛选功能。

  • click 事件监听器中,我们首先通过 Array.from 方法将 input 元素的值转换成数组,并使用 map 方法获取到每个输入框的值,然后进行简单的处理,例如去除字符串前后空格并转化为小写字母。

  • 接下来,我们使用 Array.fromforEach 配合 item.style.display,遍历 ul 元素下的所有子元素 li,并从中获取 data-namedata-type 属性值,同样进行处理,最后使用 includes 方法进行检索筛选。

  • 对于每个 li 元素,如果 nametype 包含了所有搜索关键字,则展示该元素,否则隐藏该元素。

3. 示例说明

以下是两个多条件筛选的实例说明:

示例一

如果我们需要根据不同的地区和商品类型筛选产品,则可以使用以下HTML结构:

<div>
  <label for="search1">地区:</label>
  <input type="text" id="search1" class="filter">
</div>
<div>
  <label for="search2">商品类型:</label>
  <input type="text" id="search2" class="filter">
</div>
<button id="btn">筛选</button>

<table id="product">
  <thead>
    <tr>
      <th>商品名称</th>
      <th>商品价格</th>
      <th>所属地区</th>
      <th>商品类型</th>
    </tr>
  </thead>
  <tbody>
    <tr data-region="华东" data-product="电视">
      <td>小米电视</td>
      <td>3999</td>
      <td>华东</td>
      <td>电视</td>
    </tr>
    <tr data-region="华南" data-product="电视">
      <td>TCL电视</td>
      <td>1999</td>
      <td>华南</td>
      <td>电视</td>
    </tr>
    <tr data-region="华南" data-product="手机">
      <td>华为手机</td>
      <td>2999</td>
      <td>华南</td>
      <td>手机</td>
    </tr>
  </tbody>
</table>

在上述HTML结构中,我们使用了一个 table 元素呈现产品列表,使用 data-regiondata-product 自定义属性来存储产品的地区和类型信息。接下来,我们使用上述JavaScript代码来实现筛选功能,例如:当输入“华南”和“手机”时,应该只显示华南地区的手机产品。

示例二

如果我们需要根据关键字筛选餐厅,例如地址、电话和特色菜,则可以使用以下HTML结构:

<div>
  <label for="search1">地址:</label>
  <input type="text" id="search1" class="filter">
</div>
<div>
  <label for="search2">电话:</label>
  <input type="text" id="search2" class="filter">
</div>
<div>
  <label for="search3">特色菜:</label>
  <input type="text" id="search3" class="filter">
</div>
<button id="btn">筛选</button>

<ul id="restaurant">
  <li data-name="张三私房菜" data-address="广东省深圳市南山区科技园南区B2栋" data-phone="0755-12345678">张三私房菜</li>
  <li data-name="李四家常菜" data-address="广东省深圳市龙岗区横岗镇万象城2楼"></li>
  <li data-name="王五川菜馆" data-address="广东省广州市天河区体育中心大厦11楼" data-phone="020-88888888" data-feature="水煮鱼">王五川菜馆</li>
</ul>

在上述HTML结构中,我们使用了一个 ul 元素呈现餐厅列表,使用 data-namedata-addressdata-phonedata-feature 自定义属性来存储餐厅的信息。接下来,我们使用上述JavaScript代码来实现筛选功能,例如:当输入“深圳”、“12345678”和“水煮鱼”时,应该只显示这一家餐厅。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS实现多条件筛选 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript中DOM操作常用事件总结

    下面将详细讲解“JavaScript中DOM操作常用事件总结”的攻略。 标题 “JavaScript中DOM操作常用事件总结” 介绍 在JavaScript中,DOM操作是非常常见的,而操作DOM的过程中,经常会用到事件。本攻略将对JavaScript中常用的DOM事件进行总结和讲解。 常用DOM事件 以下是常用的DOM事件: click – 鼠标点击事件 …

    JavaScript 2023年6月10日
    00
  • JavaScript中的作用域链和闭包

    下面为你详细讲解”JavaScript中的作用域链和闭包”。 什么是作用域链? 作用域链定义了变量和函数在定义时能够访问的范围,也即可以被访问的区域。在JavaScript中,函数作用域是唯一的作用域单元。当函数被创建时,它的作用域链是由当前函数的内部作用域和外部函数的作用域链组成的。这个过程会逐级向上找到全局作用域,直至找到全局作用域为止,形成了作用域链。…

    JavaScript 2023年6月10日
    00
  • 用Javascript读取中文COOKIE的解决办法

    下面我将为你详细讲解“用Javascript读取中文COOKIE的解决办法”的完整攻略。 1. 什么是COOKIE? COOKIE是一种浏览器端数据存储技术,也是在Web应用中用于记录用户状态、保存用户偏好、跟踪用户行为等的一种机制。当用户在访问Web应用时,服务器可以将包含特定信息(如用户名、购物车商品、浏览历史等)的COOKIE添加到用户的浏览器中,浏览…

    JavaScript 2023年5月19日
    00
  • js冒泡法和数组转换成字符串示例代码

    让我来为大家详细讲解一下 “js冒泡法和数组转换成字符串示例代码” 的攻略。 js冒泡法 1. 什么是冒泡法? 冒泡法是一种基础的排序算法。它会重复地遍历数组,每次比较相邻两个元素的大小,并根据大小进行交换,直到数组顺序正确位置。 2. 冒泡法的具体实现 下面是冒泡法的详细代码: function bubbleSort(arr) { var len = ar…

    JavaScript 2023年5月28日
    00
  • JavaScript中类型的强制转换与隐式转换详解

    JavaScript中类型的强制转换与隐式转换详解 JavaScript中的类型转换分为强制转换和隐式转换两种方式,其中强制转换指的是通过代码强制转换变量的数据类型,而隐式转换则是在其他操作中自动进行类型转换。 强制转换 Number() Number()方法可以将其他数据类型转换为数字类型。如果转换结果不符合要求,则会返回NaN(Not-A-Number)…

    JavaScript 2023年6月10日
    00
  • 10个最受欢迎的 JavaScript框架(推荐)

    10个最受欢迎的 JavaScript框架(推荐)攻略 1. 什么是JavaScript框架? JavaScript框架是一种将一些较为复杂的任务给封装在一起,并提供一些便利性的工具的集合。JavaScript框架有很多,而每个框架都有自己独特的特性,可以根据项目需要进行选择。 2. 为什么需要用JavaScript框架? JavaScript框架有很多功能…

    JavaScript 2023年5月18日
    00
  • JavaScript插件化开发教程 (三)

    下面我会详细讲解“JavaScript插件化开发教程 (三)”的完整攻略,包括背景、步骤及相关示例说明。 背景 在开发Web应用程序时,我们经常需要封装一些可重用的组件以提高开发效率,这时候插件化开发的思想就显得尤为重要。本教程将教会你如何使用JavaScript实现插件化开发。 步骤 步骤一:实现选项参数(options) 首先,我们需要实现一个选项参数(…

    JavaScript 2023年5月18日
    00
  • 浅谈C#.NET、JavaScript和JSON

    浅谈C#.NET、JavaScript和JSON C#.NET C#.NET是由微软公司开发的一种多范式编程语言。它具有类型安全、面向对象、高性能和可维护性等特点。除了Windows操作系统外,它还支持跨平台开发,可以在Linux和macOS上编写应用程序。在C#.NET中,JSON(JavaScript Object Notation)可以方便地序列化和反…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部