js实现简单商品筛选功能


Posted in Javascript onFebruary 02, 2021

本文实例为大家分享了js实现商品筛选功能的具体代码,供大家参考,具体内容如下

应用场景:商品筛选

js实现简单商品筛选功能

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <style type="text/css">
 * {
 margin: 0;
 padding: 0;
 list-style: none;
 text-decoration: none;
 }
 
 .choose {
 width: 500px;
 height: auto;
 margin: auto;
 }
 
 .choose nav {
 height: 50px;
 background-color: red;
 }
 
 .choose nav span {
 margin: 0 5px;
 }
 
 .choose .show {
 color: red;
 }
 
 .choose ul li {
 border: 1px solid black;
 }
 
 .choose ul li a {
 box-sizing: border-box;
 display: inline-block;
 width: 40px;
 border-left: 1px solid black;
 margin: 5px;
 padding-left: 5px;
 }
 </style>
</head>

<body>
 <div class="choose">
 <nav></nav>
 <ul>
 <li>
 <strong>手机:</strong>
 <a href="javascript:;">小米</a>
 <a href="javascript:;">华为</a>
 <a href="javascript:;">apple</a>
 <a href="javascript:;">OPPO</a>
 <a href="javascript:;">vivo</a>
 </li>
 <li>
 <strong>价格:</strong>
 <a href="javascript:;">3200</a>
 <a href="javascript:;">2600</a>
 <a href="javascript:;">899</a>
 <a href="javascript:;">2799</a>
 <a href="javascript:;">2299</a>
 </li>
 <li>
 <strong>屏幕:</strong>
 <a href="javascript:;">399</a>
 <a href="javascript:;">600</a>
 <a href="javascript:;">800</a>
 <a href="javascript:;">1200</a>
 </li>
 </ul>
 </div>
</body>

</html>
<script type="text/javascript">
 var li = document.querySelectorAll('li');
 var stack = []; //存放三个类别的option

 for (var i = 0; i < li.length; i++) {
 // 获取每个li中的option进行处理
 var options = li[i].querySelectorAll("a");
 for (var j = 0; j < options.length; j++) {
 // 当选项被点击时,传入点击的类别是第几个li的
 // options[j].onclick = Aclick.bind(options[j], [i]); //1. 将点击事件分离出去
 options[j].onclick = Bclick(i); //2. 将点击事件分离出去
 }
 }
</script>

当写到这里的时候想要把这个事件函数分离出去,但是有参数。于是问题出现

如何将一个带参数的事件函数分离出去???

于是乎:就有了以下两种方法

1、使用bind改变this指向后返回一个不执行的函数

function Aclick(index) {
// 删掉nav
var choose = document.querySelector('.choose');
var nav = document.querySelector(".choose nav");
 choose.removeChild(nav);

 // 使用stack重新添加
 stack[index] = this.innerHTML;
 var nav = document.createElement("nav");
 for (k = 0; k < stack.length; k++) {
 if (stack[k] != "" && stack[k] != undefined) { //略过stack中的空项,重新向nav中添加span
  var span = document.createElement("span");
  var a = document.createElement("a");
  a.innerHTML = "X";
  a.href = "javascript:void(0);";
  span.innerHTML = stack[k];
  a.onclick = function() {
  stack[index] = "";
  nav.removeChild(this.parentNode);
  }
  span.appendChild(a);
  nav.appendChild(span);
 }
 }
 choose.insertBefore(nav, choose.children[0]);
}

2、在注册函数外面套一层函数将注册函数返回

function Bclick(index) {
 return function() {
 // 删掉nav
 var choose = document.querySelector('.choose');
 var nav = document.querySelector(".choose nav");
 choose.removeChild(nav);

 // 使用stack重新添加
 stack[index] = this.innerHTML;
 var nav = document.createElement("nav");
 for (k = 0; k < stack.length; k++) {
  if (stack[k] != "" && stack[k] != undefined) { //略过stack中的空项,重新向nav中添加span
  var span = document.createElement("span");
  var a = document.createElement("a");
  a.innerHTML = "X";
  a.href = "javascript:void(0);";
  span.innerHTML = stack[k];
  a.onclick = function() {
  stack[index] = "";
  nav.removeChild(this.parentNode);
  }
  span.appendChild(a);
  nav.appendChild(span);
  }
 }
 choose.insertBefore(nav, choose.children[0]);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS 分号引起的一段调试问题
Jun 18 Javascript
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
May 23 Javascript
javascript 构造函数方式定义对象
Jan 02 Javascript
jquery实现文本框textarea自适应高度
Mar 09 Javascript
基于jquery实现图片放大功能
May 07 Javascript
JQuery PHP图片在线裁剪实例
Jul 27 Javascript
SpringMVC+bootstrap table实例详解
Jun 02 Javascript
Vue之Watcher源码解析(2)
Jul 19 Javascript
Javascript es7中比较实用的两个方法示例
Jul 21 Javascript
vue如何引入sass全局变量
Jun 28 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
Apr 25 Javascript
如何在现代JavaScript中编写异步任务
Jan 31 #Javascript
ES6的循环与可迭代对象示例详解
Jan 31 #Javascript
Javascript生成器(Generator)的介绍与使用
Jan 31 #Javascript
Node.js中的异步生成器与异步迭代详解
Jan 31 #Javascript
Vite和Vue CLI的优劣
Jan 30 #Vue.js
如何使用RoughViz可视化Vue.js中的草绘图表
Jan 30 #Vue.js
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 #Javascript
You might like
详谈php静态方法及普通方法的区别
2016/10/04 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
利用javascript查看html源文件
2006/11/08 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
60个很实用的jQuery代码开发技巧收集
2014/12/15 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
python多进程并行代码实例
2019/09/30 Python
Python底层封装实现方法详解
2020/01/22 Python
python实现在线翻译功能
2020/03/03 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
面向新手解析python Beautiful Soup基本用法
2020/07/11 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
python爬取豆瓣电影排行榜(requests)的示例代码
2021/02/18 Python
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
检察院起诉书
2015/05/20 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
环保证明
2015/06/23 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
Elasticsearch 基本查询和组合查询
2022/04/19 Python