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 相关文章推荐
Extjs学习笔记之六 面版
Jan 08 Javascript
Js-$.extend扩展方法使方法参数更灵活
Jan 15 Javascript
jQuery的deferred对象详解
Nov 12 Javascript
javascript正则表达式总结
Feb 29 Javascript
jQuery插件ajaxFileUpload使用实例解析
Oct 19 Javascript
网页中的图片查看器viewjs使用方法
Jul 11 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
关于vue单文件中引用路径的处理方法
Jan 08 Javascript
解决vue中虚拟dom,无法实时更新的问题
Sep 15 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
Apr 29 Javascript
微信小程序仿通讯录功能
Apr 09 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 中的批处理的实现
2007/06/14 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
想用好React的你必须要知道的一些事情
2017/07/24 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
Python 查看文件的编码格式方法
2017/12/21 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
python新手学习可变和不可变对象
2020/06/11 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
python中pdb模块实例用法
2021/01/15 Python
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
ORACLE十问
2015/04/20 面试题
大学校园活动策划书
2014/02/04 职场文书
个人自我鉴定总结
2014/03/25 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
镇创先争优活动总结
2014/08/28 职场文书
先进工作者申报材料
2014/12/23 职场文书
技术支持岗位职责
2015/02/13 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
PHP设计模式(观察者模式)
2021/07/07 PHP
Docker部署Mysql8的实现步骤
2022/07/07 Servers