詳解js中class的多種函數(shù)封裝方法
本文實(shí)例講解了js中class的多種函數(shù)封裝方法,分享給大家供大家參考,具體內(nèi)容如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>關(guān)于class的多種函數(shù)封裝</title> <style> body{ margin: 0; } li{ height: 20px; } </style> </head> <body> <div class="box" id="box"> <ul class="list"> <li class="in abc ab "></li> <li class="in ac b "></li> <li class="in a "></li> <li class="in acb "></li> <li class="in ba "></li> <li class="abc"></li> </ul> </div> <script> //數(shù)組的indexOf方法封裝 function indexOf(arr,value,start){ //如果不設(shè)置start,則默認(rèn)start為0 if(arguments.length == 2){ start = 0; } //如果數(shù)組中存在indexOf方法,則用原生的indexOf方法 if(arr.indexOf){ return arr.indexOf(value,start); } for( var i = 0; i < arr.length; i++){ if(arr[i] === value){ return i; } } return -1; } //數(shù)組去重方法封裝 function noRepeat(arr){ var result = []; for( var i = 0; i < arr.length; i++){ if(indexOf(result,arr[i]) == -1){ result.push(arr[i]); } } return result; } //inArray方法封裝 function inArray(arr,value){ for(var i = 0; i < arr.length; i++){ if(arr[i] === value){ return true; } } return false; } //去除首尾空格函數(shù)封裝 function trim(arr){ var result = arr.replace(/^\s+|\s+$/g,''); return result; } //getElementsByClassName函數(shù)封裝 function getElementsByClassName(parentObj,classStr){ var result = []; var objs = parentObj.getElementsByTagName('*'); //如果classStr用空格分隔,則表示class必須同時(shí)滿(mǎn)足才有效 var targetArr1 = noRepeat(trim(classStr).split(/\s+/)); //如果classStr用逗號(hào)分隔,則表示class只要有一個(gè)滿(mǎn)足就有效 var targetArr2 = noRepeat(trim(classStr).split(/\s*,\s*/)); if(classStr.indexOf(',') == -1 ){ //用空格分隔或者只有一個(gè)class label: for(var i = 0; i < objs.length; i++){ var arr = noRepeat(trim(objs[i].className).split(/\s+/)); for( var j = 0; j < targetArr1.length; j++){ if(!inArray(arr,targetArr1[j])){ continue label; } } result.push(objs[i]); } return result; }else{ //用逗號(hào)分隔 label: for(var i = 0; i < objs.length; i++){ var arr = noRepeat(trim(objs[i].className).split(/\s+/)); for( var j = 0; j < targetArr2.length; j++){ if(inArray(arr,targetArr2[j])){ result.push(objs[i]); continue label; } } } return result; } } //addclass函數(shù)封裝 function addClass(obj,classStr){ var array = noRepeat(trim(obj.className).split('\s+')); if(!inArray(array,classStr)){ array.push(classStr); } obj.className = array.join(' '); return obj; } //removeclass函數(shù)封裝 function removeClass(obj,classStr){ var array = noRepeat(trim(obj.className).split('\s+')); var index = indexOf(array,classStr); if(index != -1){ classStr.splice(index,1); obj.className = classStr.join(' '); } return obj; } //toggleClass函數(shù)封裝 function toggleClass(obj,classStr){ var array = noRepeat(trim(obj.className).split('\s+')); if(inArray(array,classStr)){ removeClass(obj,classStr); }else{ addClass(obj,classStr); } } </script> </body> </html>
希望本文所述對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
Bootstrap幻燈片輪播圖支持觸屏左右手勢(shì)滑動(dòng)的實(shí)現(xiàn)方法
最近在研究用bootstrap搭建網(wǎng)站,Bootstrap能自適應(yīng)pc端和手機(jī)端,并且移動(dòng)設(shè)備優(yōu)先,適合現(xiàn)如今移動(dòng)營(yíng)銷(xiāo),大家用的設(shè)備基本是觸屏的了,能用滑動(dòng)交互在小屏幕上體驗(yàn)會(huì)更好,那么如何實(shí)現(xiàn)呢?下面小編給大家介紹下bootstrap 手勢(shì)滑動(dòng)輪播圖的實(shí)現(xiàn)方法2016-10-10PHP實(shí)現(xiàn)記錄代碼運(yùn)行時(shí)間封裝類(lèi)實(shí)例教程
這篇文章主要給大家介紹了利用PHP實(shí)現(xiàn)記錄代碼運(yùn)行時(shí)間的封裝類(lèi)的相關(guān)教程,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友可以參考下2017-05-05原生JavaScript實(shí)現(xiàn)動(dòng)態(tài)省市縣三級(jí)聯(lián)動(dòng)下拉框菜單實(shí)例代碼
像平時(shí)購(gòu)物選擇地址時(shí)一樣,通過(guò)選擇的省動(dòng)態(tài)加載城市列表,通過(guò)選擇的城市動(dòng)態(tài)加載縣區(qū)列表,從而可以實(shí)現(xiàn)省市縣的三級(jí)聯(lián)動(dòng),下面使用原生的JavaScript來(lái)實(shí)現(xiàn)這個(gè)功能,需要的朋友參考下吧2016-02-02javascript 動(dòng)態(tài)添加事件代碼
往往我們需要在 JS 中動(dòng)態(tài)添加事件,這就涉及到瀏覽器兼容性問(wèn)題了,以下談及的幾種方法,我們也常?;旌鲜褂谩?/div> 2008-11-11JS判斷頁(yè)面加載狀態(tài)以及添加遮罩和緩沖動(dòng)畫(huà)的代碼
JS判斷頁(yè)面加載狀態(tài)以及添加遮罩和緩沖動(dòng)畫(huà)的代碼廢話(huà)少說(shuō),直接貼代碼!有注釋2012-10-10js實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的幾種方法小結(jié)
下面小編就為大家?guī)?lái)一篇js實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的幾種方法小結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2016-05-05學(xué)習(xí)javascript面向?qū)ο?實(shí)例講解面向?qū)ο筮x項(xiàng)卡
這篇文章主要介紹了面向?qū)ο筮x項(xiàng)卡實(shí)現(xiàn)方法,幫助大家更好地學(xué)習(xí)javascript面向?qū)ο?,感興趣的小伙伴們可以參考一下2016-01-01利用es6 new.target來(lái)對(duì)模擬抽象類(lèi)的方法
這篇文章主要介紹了利用es6 new.target來(lái)對(duì)模擬抽象類(lèi)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05最新評(píng)論