最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2011年01月09日 19:01:21   作者:  
同一個(gè)頁面, 有多組(不固定), 每組區(qū)塊數(shù)量不一定一樣的小區(qū)塊. 要求每次只展開一個(gè)區(qū)塊,需要的朋友可以參考下。
需求是, 同一個(gè)頁面, 有多組(不固定), 每組區(qū)塊數(shù)量不一定一樣的小區(qū)塊. 要求每次只展開一個(gè)區(qū)塊. 實(shí)現(xiàn)原理其實(shí)很簡單, 點(diǎn)擊導(dǎo)航, 若它的區(qū)塊為隱藏, 則展開它, 同時(shí), 隱藏掉同組其他區(qū)塊; 若它的區(qū)塊為展開, 則隱藏它, 同時(shí), 展開同組其他區(qū)塊中的一個(gè). 一開始以為僅僅簡單的兩個(gè)遍歷就能搞定. 但事實(shí)并非如此. 冷靜思考了下, 通過點(diǎn)擊的元素取到當(dāng)前組的相關(guān)元素, 再單獨(dú)處理當(dāng)前組才合理. 順著這個(gè)思路, 功能終于實(shí)現(xiàn)了, 寫了原生Js版本, 用同樣的思路寫了個(gè)jQ版本. 時(shí)間關(guān)系, 寫的也比較零散, 就沒有封裝. 其實(shí), 對這種思路也不是很滿意, 感覺太散了, 哪位大師有更好的思路請賜教.

jQ版區(qū)塊的標(biāo)題, 會有一個(gè)Js錯(cuò)誤, 那是因?yàn)楂@取Js版下的h2時(shí), 我偷了個(gè)懶, 把jQ的也遍歷進(jìn)去了. 我想, 實(shí)際應(yīng)用中, 也不會有人同一個(gè)效果, 一邊用Js一邊用jQ吧. 核心代碼點(diǎn)此查看樣例
復(fù)制代碼 代碼如下:

//原生Js版本 ***** start
window.onload=function(){
//共用函數(shù)區(qū)
var iBase={
//document.getElementById
Id: function(name){return document.getElementById(name)},
//通過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也取到了,所以頁面會有個(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.fzitv.net/jiaoben/33950.html
本人來自Mr.Think的博客 http://mrthink.net/jsjq-flod-onlyone/

相關(guān)文章

  • javascript 自動(dòng)轉(zhuǎn)到命名錨記

    javascript 自動(dòng)轉(zhuǎn)到命名錨記

    javascript 自動(dòng)轉(zhuǎn)到命名錨記,方面業(yè)內(nèi)控制導(dǎo)航等信息
    2009-01-01
  • 利用types增強(qiáng)vscode中js代碼提示功能詳解

    利用types增強(qiáng)vscode中js代碼提示功能詳解

    這篇文章主要給大家介紹了如何增強(qiáng)vscode中js代碼提示功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • JavaScript基于DOM操作實(shí)現(xiàn)簡單的數(shù)學(xué)運(yùn)算功能示例

    JavaScript基于DOM操作實(shí)現(xiàn)簡單的數(shù)學(xué)運(yùn)算功能示例

    這篇文章主要介紹了JavaScript基于DOM操作實(shí)現(xiàn)簡單的數(shù)學(xué)運(yùn)算功能,涉及javascript節(jié)點(diǎn)操作、元素遍歷及數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • 利用JavaScript實(shí)現(xiàn)創(chuàng)建虛擬鍵盤的示例代碼

    利用JavaScript實(shí)現(xiàn)創(chuàng)建虛擬鍵盤的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript實(shí)現(xiàn)創(chuàng)建虛擬鍵盤,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)JavaScript有一定幫助,需要的可以參考一下
    2022-09-09
  • uniapp中使用vuex并持久化的方法示例

    uniapp中使用vuex并持久化的方法示例

    vuex是基于vuex.js的狀態(tài)管理工具,可以把它理解為一個(gè)倉庫,下面這篇文章主要給大家介紹了關(guān)于uniapp中如何使用vuex并持久化的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 編寫針對IE的JS代碼兩種編寫方法

    編寫針對IE的JS代碼兩種編寫方法

    有些時(shí)候我們需要針對某些IE下的兼容性寫單獨(dú)的JS處理代碼,這只是簡簡單單為了兼容行啊,有多種方法可以實(shí)現(xiàn),小編整理了一下,感興趣的朋友可以了解下,或許對你有所幫助
    2013-01-01
  • JavaScript定時(shí)器原理詳解

    JavaScript定時(shí)器原理詳解

    這篇文章主要介紹了JavaScript定時(shí)器原理,setTimeout()方法用于設(shè)置一個(gè)定時(shí)器,該定時(shí)器在定時(shí)器到期后執(zhí)行調(diào)用函數(shù),文章圍繞JavaScript定時(shí)器相關(guān)資料展開以下內(nèi)容,需要的朋友可以參考一下
    2021-12-12
  • Bootstrap一款超好用的前端框架

    Bootstrap一款超好用的前端框架

    Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,用于開發(fā)響應(yīng)式布局、移動(dòng)設(shè)備優(yōu)先的 WEB 項(xiàng)目。接下來通過本文給大家分享Bootstrap一款超好用的前端框架,感興趣的朋友一起看看吧
    2017-09-09
  • 使用js實(shí)現(xiàn)單鏈解決前端隊(duì)列問題的方法

    使用js實(shí)現(xiàn)單鏈解決前端隊(duì)列問題的方法

    這篇文章主要介紹了使用js實(shí)現(xiàn)單鏈解決前端隊(duì)列問題的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • JavaScript實(shí)現(xiàn)手勢識別的示例詳解

    JavaScript實(shí)現(xiàn)手勢識別的示例詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScrip如何利用?TensorFlow.js?中的?HandPose?模型,實(shí)現(xiàn)一個(gè)基于視頻流的手勢識別系統(tǒng),感興趣的可以了解下
    2024-12-12

最新評論

东乡族自治县| 扶绥县| 乌兰察布市| 山东省| 澳门| 海晏县| 德格县| 黄平县| 凌海市| 浦县| 丹东市| 固始县| 常山县| 清镇市| 成安县| 项城市| 东港市| 油尖旺区| 西峡县| 广南县| 太原市| 西乌珠穆沁旗| 锡林郭勒盟| 兴山县| 普格县| 临安市| 三明市| 定州市| 徐州市| 鄂伦春自治旗| 延安市| 嘉义市| 台南市| 富民县| 綦江县| 濮阳县| 怀远县| 康平县| 广昌县| 手游| 勃利县|