js實(shí)現(xiàn)簡(jiǎn)單商品篩選功能
本文實(shí)例為大家分享了js實(shí)現(xiàn)商品篩選功能的具體代碼,供大家參考,具體內(nèi)容如下
應(yīng)用場(chǎng)景:商品篩選

<!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>手機(jī):</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>價(jià)格:</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 = []; //存放三個(gè)類別的option
for (var i = 0; i < li.length; i++) {
// 獲取每個(gè)li中的option進(jìn)行處理
var options = li[i].querySelectorAll("a");
for (var j = 0; j < options.length; j++) {
// 當(dāng)選項(xiàng)被點(diǎn)擊時(shí),傳入點(diǎn)擊的類別是第幾個(gè)li的
// options[j].onclick = Aclick.bind(options[j], [i]); //1. 將點(diǎn)擊事件分離出去
options[j].onclick = Bclick(i); //2. 將點(diǎn)擊事件分離出去
}
}
</script>
當(dāng)寫到這里的時(shí)候想要把這個(gè)事件函數(shù)分離出去,但是有參數(shù)。于是問題出現(xiàn)
如何將一個(gè)帶參數(shù)的事件函數(shù)分離出去???
于是乎:就有了以下兩種方法
1、使用bind改變this指向后返回一個(gè)不執(zhí)行的函數(shù)
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中的空項(xiàng),重新向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、在注冊(cè)函數(shù)外面套一層函數(shù)將注冊(cè)函數(shù)返回
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中的空項(xiàng),重新向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]);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS關(guān)閉窗口時(shí)產(chǎn)生的事件及用法示例
這篇文章主要介紹了JS關(guān)閉窗口時(shí)產(chǎn)生的事件及用法,結(jié)合關(guān)閉窗口時(shí)提交評(píng)論的實(shí)例分析了javascript事件觸發(fā)機(jī)制及遮罩層實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08
JavaScript實(shí)現(xiàn)網(wǎng)頁計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)網(wǎng)頁計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
webpack4與babel配合使es6代碼可運(yùn)行于低版本瀏覽器的方法
這篇文章主要介紹了webpack4與babel配合使es6代碼可運(yùn)行于低版本瀏覽器的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10
JavaScript實(shí)現(xiàn)自定義拖拽排序列表
在Web開發(fā)中,拖拽排序是一個(gè)常見的需求,它允許用戶通過拖拽的方式重新排列列表項(xiàng)的順序,本文將介紹如何使用原生JavaScript實(shí)現(xiàn)這一功能,需要的可以了解下2024-01-01
js+css實(shí)現(xiàn)的圓角邊框TAB選項(xiàng)卡滑動(dòng)門代碼分享(2款)
這篇文章主要為大家詳細(xì)介紹了兩種js+css實(shí)現(xiàn)的圓角邊框TAB選項(xiàng)卡滑動(dòng)門效果,很實(shí)用的代碼,推薦給大家,有需要的小伙伴可以參考下2015-08-08
JS簡(jiǎn)單實(shí)現(xiàn)DIV相對(duì)于瀏覽器固定位置不變的方法
這篇文章主要介紹了JS簡(jiǎn)單實(shí)現(xiàn)DIV相對(duì)于瀏覽器固定位置不變的方法,涉及javascript針對(duì)頁面位置的運(yùn)算與動(dòng)態(tài)變換技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06

