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 相关文章推荐
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
May 23 Javascript
js 操作select和option常用代码整理
Dec 13 Javascript
JavaScript常用脚本汇总(三)
Mar 04 Javascript
js实现精确到秒的日期选择器完整实例
Apr 30 Javascript
angularjs封装bootstrap时间插件datetimepicker
Jun 20 Javascript
关于Webpack dev server热加载失败的解决方法
Feb 22 Javascript
vue异步axios获取的数据渲染到页面的方法
Aug 09 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
Aug 31 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
layui字体图标 loading图标静止不旋转的解决方法
Sep 23 Javascript
js仿360开机效果
Dec 26 Javascript
react 生命周期实例分析
May 18 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
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
Javascript倒计时代码
2010/08/12 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
Vue结合原生js实现自定义组件自动生成示例
2017/01/21 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
node后端服务保活的实现
2019/11/10 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
python实现装饰器、描述符
2018/02/28 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
辞职信模板(中英文版)
2015/02/27 职场文书
科技活动总结范文
2015/05/11 职场文书
战马观后感
2015/06/08 职场文书
高中历史教学反思
2016/02/19 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
Mybatis是这样防止sql注入的
2021/12/06 Java/Android