原生JS实现多条件筛选

原生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实现Ajax异步请求

    原生JavaScript实现Ajax异步请求的攻略如下: 原生JavaScript实现Ajax异步请求步骤 创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); 设置请求的方法、URL以及是否为异步请求 xhr.open(‘GET’, ‘example.com/data.json’, true); 监听XMLH…

    JavaScript 2023年6月11日
    00
  • 在页面加载之后执行JavaScript

    在页面加载之后执行JavaScript通常包括以下两种情况: 在DOMContentLoaded事件触发之后执行JavaScript代码 DOMContentLoaded事件在文档结构已经加载完成,但是加载的所有资源(例如图片)还没有完成的时候触发。可以使用addEventListener()方法监听DOMContentLoaded事件,并在回调函数中执行J…

    JavaScript 2023年6月11日
    00
  • php正则表达式基本知识与应用详解【经典教程】

    “PHP正则表达式基本知识与应用详解【经典教程】”是一篇关于PHP正则表达式的详细讲解文章,包含了从正则表达式基础知识到应用实例的全面介绍。 一、正则表达式基础知识 文章首先详细介绍了正则表达式的基础知识,包括元字符、定界符、字符集、量词等内容。针对每个知识点,作者都进行了详细的讲解并给出了示例说明。 例如,对于元字符一节,作者列出了常见的元字符,并给出了它…

    JavaScript 2023年6月10日
    00
  • java中文乱码之解决URL中文乱码问题的方法

    Java中文乱码之解决URL中文乱码问题的方法 在Java的开发中,经常会遇到中文乱码问题,其中URL中文乱码是开发者较为常见的问题之一,本篇文章将详细介绍Java中解决URL中文乱码方法。 URL中文乱码问题的原因 中文字符在计算机中以二进制流的形式存储,而URL中只能包含ASCII码字符,当URL中包含中文字符时,需要进行转换成编码形式,常用的包括URL…

    JavaScript 2023年5月19日
    00
  • JavaScript闭包的简单应用

    当我们使用JavaScript编写程序时,很多时候会涉及到闭包(closure)的使用。闭包是指函数能够访问和使用在其定义域外部的变量。在本文中,我们将探讨什么是闭包以及如何在JavaScript中使用它们。 什么是闭包? 闭包是一个函数,它可以访问和使用在其定义的外部作用域之外的变量。这些变量通常保存在闭包所在的函数的作用域中。 当一个函数被定义时,它会创…

    JavaScript 2023年6月10日
    00
  • 小程序表单认证布局及验证详解

    小程序表单认证布局及验证详解 背景分析 在小程序中,表单认证(即用户输入的表单信息的验证)是一个比较基础的功能,它能够帮助我们检查用户输入的格式是否正确,从而提高应用的稳定性和友好性。下面是针对小程序表单认证的布局及验证过程的详解。 布局方式 在小程序中,表单通常采用form组件实现。在form内,可以设置多个input组件,每个input组件可能包含一个或…

    JavaScript 2023年6月10日
    00
  • javascript 中对象的继承〔转贴〕

    以下是javascript中对象的继承攻略: 1. 继承的概念 在Javascript中,可以通过继承的方式来实现代码的复用性。继承是一种以已有类(或对象)为基础,创建新类(或对象)的技术,新创建的类或对象具有已有类(或对象)的属性和行为。 2. 原型链继承 原型链继承是Javascript中最基础的继承方式,它的原理就是通过让一个构造函数的原型指向另一个构…

    JavaScript 2023年5月27日
    00
  • Vue Router深扒实现原理

    Vue Router深扒实现原理 Vue Router 是 Vue.js 官方的路由管理器插件,是构建 Vue.js 单页应用程序必不可少的工具之一。Vue Router 提供了诸如路由参数、路由匹配、嵌套路由等功能,可以帮助我们快速构建复杂的应用程序。本文将深入剖析 Vue Router 的实现原理,包括路由映射、导航守卫、懒加载等方面。 路由映射 在 V…

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