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 相关文章推荐
用方法封装javascript的new操作符(一)
Dec 25 Javascript
javascript实现动态侧边栏代码
Feb 19 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
jquery实现的简单二级菜单效果代码
Sep 22 Javascript
javascript合并表格单元格实例代码
Jan 03 Javascript
Angularjs过滤器使用详解
May 25 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
Dec 14 Javascript
动态加载权限管理模块中的Vue组件
Jan 16 Javascript
Vue-cli中为单独页面设置背景色的实现方法
Feb 11 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 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输出xml必须header的解决方法
2014/10/17 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
python numpy格式化打印的实例
2018/05/14 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
pandas重新生成索引的方法
2018/11/06 Python
python实现合并两个排序的链表
2019/03/03 Python
python绘制漏斗图步骤详解
2019/03/04 Python
python sort、sort_index方法代码实例
2019/03/28 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
伦敦著名的运动鞋综合商店:Footpatrol
2019/03/25 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
欢送退休感言
2014/02/08 职场文书
法制宣传教育方案
2014/05/09 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
大学生操行评语大全
2014/12/31 职场文书
内勤岗位职责
2015/02/10 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
python小程序之飘落的银杏
2021/04/17 Python