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 相关文章推荐
让你的博客飘雪花超出屏幕依然看得见
Jan 04 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
JavaScript节点及列表操作实例小结
Aug 05 Javascript
JS中使用变量保存arguments对象的方法
Jun 03 Javascript
简单模拟node.js中require的加载机制
Oct 27 Javascript
footer定位页面底部(代码分享)
Mar 07 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
Jun 19 Javascript
JS检测window.open打开的窗口是否关闭
Jun 25 Javascript
JS switch判断 三目运算 while 及 属性操作代码
Sep 03 Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 Javascript
微信小程序自定义组件实现环形进度条
Nov 17 Javascript
小程序新版订阅消息模板消息
Dec 31 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
如何做到多笔资料的同步
2006/10/09 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
js实现网页随机验证码
2020/10/19 Javascript
在Python中使用异步Socket编程性能测试
2014/06/25 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
python tornado微信开发入门代码
2018/08/24 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
python datetime中strptime用法详解
2019/08/29 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
为什么说python适合写爬虫
2020/06/11 Python
詹天佑教学反思
2014/04/30 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
教师工作总结范文2014
2014/11/10 职场文书
学习保证书怎么写
2015/02/26 职场文书
博士给导师的自荐信
2015/03/06 职场文书
美丽的大脚观后感
2015/06/03 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS