原生Js與jquery的多組處理, 僅展開一個(gè)區(qū)塊的折疊效果

jQ版區(qū)塊的標(biāo)題, 會(huì)有一個(gè)Js錯(cuò)誤, 那是因?yàn)楂@取Js版下的h2時(shí), 我偷了個(gè)懶, 把jQ的也遍歷進(jìn)去了. 我想, 實(shí)際應(yīng)用中, 也不會(huì)有人同一個(gè)效果, 一邊用Js一邊用jQ吧. 核心代碼點(diǎn)此查看樣例
//原生Js版本 ***** start
window.onload=function(){
//共用函數(shù)區(qū)
var iBase={
//document.getElementById
Id: function(name){return document.getElementById(name)},
//通過(guò)class獲取元素
GetByClass: function(name,tagName,elem){
var c=[];
var re=new RegExp('(^|\\s)'+name+'(|\\s$)');
var e=(elem || document).getElementsByTagName(tagName || '*');
for(var i=0; i < e.length; i++){
if(re.test(e[i].className)){
c.push(e[i]);
}
}
return c;
},
//獲取樣式屬性
AttrStyle: function(elem,attr){
if(elem.attr){
return elem.style[attr];
}else if(elem.currentStyle){
return elem.currentStyle[attr];
}else if(document.defaultView && document.defaultView.getComputedStyle){
attr=attr.replace(/([A-Z])/g,'-$1').toLowerCase();
return document.defaultView.getComputedStyle(elem,null).getPropertyValue(attr);
}else{
return null;
}
},
//獲取祖輩元素中符合指定樣式的元素
Parents: function(elem,name){
var r=new RegExp('(^|\\s)'+name+'(|\\s$)');
elem=elem.parentNode;
if(elem!=null){
return r.test(elem.className) ? elem : iBase.Parent(elem,name) || null;
}
},
//取索引值
Index: function(cur,obj){
for(var i=0; i < obj.length; i++){
if(obj[i]==cur){
return i;
}
}
}
}
//變量定義
var listBox=iBase.GetByClass('js','div');
var navItem=iBase.Id('demo').getElementsByTagName('h2');//此處將jQ區(qū)塊中的h2也取到了,所以頁(yè)面會(huì)有個(gè)小小的錯(cuò)誤
var icoItem=null,boxItem=null,boxDisplay=null,elemIndex=null,elemParent=null;
//初始化展開第一個(gè)
for(var i=0; i < listBox.length;i++){
iBase.GetByClass('box','div',listBox[i])[0].style.display='block';
listBox[i].getElementsByTagName('span')[0].innerHTML='-';
}
//遍歷所有點(diǎn)擊項(xiàng)
for(var i=0; i < navItem.length;i++){
navItem[i].onclick=function(){
elemParent=iBase.Parents(this,'js');//獲取當(dāng)前點(diǎn)擊所在區(qū)塊
navItem=elemParent.getElementsByTagName('h2');//獲取當(dāng)前區(qū)塊下的點(diǎn)擊項(xiàng)
icoItem=elemParent.getElementsByTagName('span');//獲取當(dāng)前區(qū)塊下的展開關(guān)閉
boxItem=iBase.GetByClass('box','div',elemParent);//獲取需要控制的區(qū)塊
elemIndex=iBase.Index(this,navItem);//獲取當(dāng)前點(diǎn)擊在當(dāng)前區(qū)塊點(diǎn)擊項(xiàng)中的索引
//切換展開關(guān)閉圖標(biāo)
icoItem[elemIndex].innerHTML= icoItem[elemIndex].innerHTML=='-' ? '+' : '-';
if(iBase.AttrStyle(boxItem[elemIndex],'display')=='block'){
//控制項(xiàng)展開狀態(tài)下,隱藏當(dāng)前,展開其他的第一項(xiàng)
//此處有個(gè)展開0/1的判斷,因?yàn)楫?dāng)點(diǎn)擊第一個(gè)時(shí)是不能再展開第一個(gè)的
boxItem[elemIndex].style.display='none';
if(elemIndex==0){
boxItem[1].style.display='block';
icoItem[1].innerHTML='-'
}else{
boxItem[0].style.display='block'
icoItem[0].innerHTML='-'
}
}else{
//控制項(xiàng)展開狀態(tài)下,展開當(dāng)前,隱藏其他項(xiàng)
boxItem[elemIndex].style.display='block';
for(var k=0;k < boxItem.length; k++){
if(k!=elemIndex){
boxItem[k].style.display='none';
icoItem[k].innerHTML='+';
}
}
}
}
}
}
//jQuery版本 ***** start
$(function(){
//變量定義區(qū)
var _listBox=$('.jq');
var _navItem=$('.jq>h2');
var _boxItem=null, _icoItem=null, _parents=null, _index=null;
//初始化第一個(gè)展開
_listBox.each(function(i){
$(this).find('div.box').eq(0).show();
$(this).find('h2>span').eq(0).text('-');
});
//遍歷所有的點(diǎn)擊項(xiàng)
_navItem.each(function(i){
$(this).click(function(){
//找到當(dāng)前點(diǎn)擊父元素為listbox(單個(gè)區(qū)塊)的元素
_parents=$(this).parents('.listbox');
_navItem=_parents.find('h2');//此區(qū)塊中的點(diǎn)擊項(xiàng)
_icoItem=_parents.find('span');//此區(qū)塊中的展開關(guān)閉圖標(biāo)
_boxItem=_parents.find('div.box');//此區(qū)塊中展開關(guān)閉項(xiàng)
_index=_navItem.index(this);//取得當(dāng)前點(diǎn)擊在當(dāng)前區(qū)塊下點(diǎn)擊項(xiàng)中的索引值
if(_boxItem.eq(_index).is(':visible')){
//若當(dāng)前點(diǎn)擊項(xiàng)下的展開關(guān)閉項(xiàng)是顯示的,則關(guān)閉,同時(shí)展開另外項(xiàng)中的第一個(gè)
_boxItem.eq(_index).hide().end().not(':eq('+_index+')').first().show();
_icoItem.eq(_index).text('+').end().not(':eq('+_index+')').first().text('-');
}else{
//若當(dāng)前點(diǎn)擊項(xiàng)下的展開關(guān)閉項(xiàng)是隱藏的,則展開,同時(shí)隱藏其他項(xiàng)
_boxItem.eq(_index).show().end().not(':eq('+_index+')').hide();
_icoItem.eq(_index).text('-').end().not(':eq('+_index+')').text('+');
}
});
});
});
演示地址:http://demo.jb51.net/js/jsjq-flod-onlyone/index.htm
打包下載:http://www.dbjr.com.cn/jiaoben/33950.html
本人來(lái)自Mr.Think的博客 http://mrthink.net/jsjq-flod-onlyone/
- 自己寫了一個(gè)展開和收起的多更能型的js效果
- 一個(gè)封裝js代碼-----展開收起效果示例
- 慢慢展開再慢慢收起的javascript廣告效果
- JavaScript控制網(wǎng)頁(yè)層收起和展開效果的方法
- 原生js實(shí)現(xiàn)新聞列表展開/收起全文功能
- js實(shí)現(xiàn)簡(jiǎn)單折疊、展開菜單的方法
- JS+CSS實(shí)現(xiàn)的簡(jiǎn)單折疊展開多級(jí)菜單效果
- JS實(shí)現(xiàn)鼠標(biāo)滑過(guò)折疊與展開菜單效果代碼
- js實(shí)現(xiàn)選項(xiàng)卡內(nèi)容切換以及折疊和展開效果【推薦】
- JS實(shí)現(xiàn)可展開折疊層的鼠標(biāo)拖曳效果
- JavaScript實(shí)現(xiàn)兼容IE6的收起折疊與展開效果實(shí)例
相關(guān)文章
基于JavaScript實(shí)現(xiàn)選項(xiàng)卡效果
這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)選項(xiàng)卡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07教你3分鐘利用原生js實(shí)現(xiàn)有進(jìn)度監(jiān)聽的文件上傳預(yù)覽組件
這篇文章主要給大家介紹了關(guān)于如何3分鐘利用原生js實(shí)現(xiàn)有進(jìn)度監(jiān)聽的文件上傳預(yù)覽組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07遨游,飛飛,IE,空中網(wǎng) 瀏覽器無(wú)提示關(guān)閉方法
遨游,飛飛,IE,空中網(wǎng) 瀏覽器無(wú)提示關(guān)閉方法,需要的朋友可以參考下。2011-07-07GitHub上一些實(shí)用的JavaScript的文件壓縮解壓縮庫(kù)推薦
這篇文章主要介紹了GitHub上一些實(shí)用的JavaScript的文件壓縮解壓縮庫(kù)推薦,推薦的這幾個(gè)都是支持zip格式的,需要的朋友可以參考下2016-03-03微信小程序?qū)崿F(xiàn)卡片左右滑動(dòng)效果的示例代碼
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)卡片左右滑動(dòng)效果的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05localStorage過(guò)期時(shí)間設(shè)置的幾種方法
聊到localStorage想必熟悉前端的朋友都不會(huì)陌生,在實(shí)際的應(yīng)用場(chǎng)景中,我們往往需要讓localStorage設(shè)置的某個(gè)key能在指定時(shí)間內(nèi)自動(dòng)失效,所以基于這種場(chǎng)景,我們?nèi)绾稳ソ鉀Q呢,本文就詳細(xì)的介紹一下2021-12-12Webpack設(shè)置環(huán)境變量的一些誤區(qū)詳解
這篇文章主要給大家介紹了關(guān)于Webpack設(shè)置環(huán)境變量的一些誤區(qū),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Webpack具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12javaScript刪除對(duì)象屬性的幾種方法總結(jié)
這篇文章主要給大家介紹了關(guān)于javaScript刪除對(duì)象屬性的幾種方法的相關(guān)資料,它們?cè)诓煌瑘?chǎng)景下有不同的應(yīng)用,需要根據(jù)實(shí)際情況選擇最合適的刪除方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),下面需要的朋友可以參考下2023-06-06