今天用到jquery easyui 的tab组件,看看demo发现挺好用的。
demo里提供了3个方法分别是:
addTab()
getSelected()
update()
而我在开发中遇到一个问题,就是这个tab组件右上角有个小叉号可以关闭tab选项卡,
但是它没提供删除tab的方法,也就是说他把删除tab选项卡的方法封装了。
(当你打开一个tab页,再点击打开时要给出提示,它已经打开了,而不是再打开同样的tab,
否则会重复打开,所以我需要在打开tab时记录打开的tab,关闭tab时再从记录中删除它,
这样我就能保证一个tab只能打开一次,不要重复显示)
这大概是所有开发者最头疼的问题,你封装了,而我确实需要这个方法,总不能去研究你的源码吧?
如果源码写的很大,超过500行就不要去研究了,那样会更费时间。
我选择了另辟蹊径。
我可以声明一个数组,在添加tab页时,把这个tab的id加到数组中。
当次页面未关闭,用户又点击打开次tab时,我先处理这个数组,循环寻找每个id是否存在,
(不存在表明此tab已经关闭,从数组删除此id)
如果此元素存在,表明页面已经打开此tab,这时不要再打开了,要给用户提示已经打开了。
看看代码:
var isshow=new Array();
function validateShow(){
for(var i=0;i<isshow.length;i++){
var temp=isshow[i];
if(document.getElementById(temp)){
}else{
isshow.splice(i,1);
}
}
}
function isexisttab(id){
validateShow();
var falg=false;
for(var i=0;i<isshow.length;i++){
var temp=isshow[i];
if(temp==id){
falg=true;
}else{
falg=false;
}
}
return falg;
}
function createTab(id,pId,name,url){
//alert(id+pId+name+"jjj"+url);
//alert("here--"+id+"--"+pId+"--"+name);
if(isexisttab(id)){
alert("此页面已经打开");
}else{
$('#page2').tabs('add',{
title:name ,
content:'<div title=\"'+name+'\" id=\"'+id+'\" closable="true" style="overflow:hidden;width:100%;height:100%;" \><iframe scrolling="yes" frameborder="0" src="'+url+'" style="width:100%;height:100%;"></iframe></div>',
iconCls:'icon-save',
closable:true
});
isshow.push(id);
}
//
}
这里我要说js中从数组删除元素的方法 .splice(i,1);
arrayObj.splice(deletePos,deleteCount);//删除从指定位置deletePos开始的指定数量deleteCount的元素,数组形式返回所移除的元素
如果我们再for中遍历,删除当前元素就是.splice(i,1);
从前没用到过删除方法,今天一查,居然js没有数组删除元素的remove方法!!!
太令我惊讶了,不过可以.splice(i,1);实现同样效果,在此写博客记录下来。