扩展jQuery easyui tabs组件,实现根据id(或者自定义属性)操作tab标签

easyui是一个轻量级的后台管理系统框架,各种组件均有,使用简单方便,现在已经有免费版的License了。


但是它也有一些蛋疼的地方,比如tabs组件,该组件默认只能根据tab的title或者index进行相应的操作,有的时候这将令人非常的蛋疼,例如左侧导航菜单不同菜单下面可能存在名称相同的子菜单。


那么,我们能不能让它根据id或者其他的自定义的属性进行选择呢?答案是肯定的!

虽说easyui的免费版的代码是混淆过的,但是只要我们肯用心看,一切都是浮云。

下面的代码给出了扩展或者重写tabs组件方法示例(使用时将下面的代码放在进行easyui tabs操作之前即可,基于1.4版本):

(function(){//扩展easyui中tabs的部分方法,实现根据唯一标识id的进行相应操作;技巧:使用一个自执行的函数,激发作用域,避免这里定义的变量与系统全局变量冲突
	var _methods = $.fn.tabs.methods;
	var _exists = _methods.exists;//保存原方法
	var _getTab = _methods.getTab;<span style="font-family: Arial, Helvetica, sans-serif;">//保存原方法</span>
	$.extend($.fn.tabs.methods, {
		getTab : function(jq, which) {//重写getTab方法,增加根据id获取tab(注意:这里我们可以定义任意的获取方式,不必一定使用id)
			if(!which) return null;
			var tabs = jq.data('tabs').tabs;
			for (var i = 0; i < tabs.length; i++) {
				var tab = tabs[i];
				if (tab.panel("options").id==which) {
					return tab;
				}
			}
			return _getTab(jq, which);//如果根据id无法获取,则通过easyui默认的getTab进行获取
		},
		exists : function(jq, which) {//重写exists方法,增加id判断
			return this.getTab(jq,which)!=null;//调用重写后的getTab方法
		},
	});
})()

重写之后,我们就可以实现根据唯一id操作tab,而不必考虑为每个tab取一个不同的title

另外,easyui中tabs标签的关闭代码,我个人认为逻辑不够严谨(纯粹是个人看法),源代码以及改进如下:

function _334(_335,_336){
var opts=$.data(_335,"tabs").options;
var tabs=$.data(_335,"tabs").tabs;
var _337=$.data(_335,"tabs").selectHis;
if(!_338(_335,_336)){
return;
}
var tab=_339(_335,_336);
var _33a=tab.panel("options").title;
var _33b=_333(_335,tab);
if(opts.onBeforeClose.call(_335,_33a,_33b)==false){
return;
}
var tab=_339(_335,_336,true);
tab.panel("options").tab.remove();
tab.panel("destroy");
opts.onClose.call(_335,_33a,_33b);
_307(_335);
_337.splice(_33b,1);//TODO 我添加的代码: 删除被关闭的tab所对应的index处的title元素(数组中元素位置是严格按照tab打开的顺序存放),效率高于循环遍历。
/*for(var i=0;i<_337.length;i++){//此处是注释掉的代码为源代码:移除所有title==被关闭的tab的title	
if(_337[i]==_33a){
_337.splice(i,1);
i--;
}
}*/
var _33c=_337.pop();
if(_33c){
_32a(_335,_33c);
}else{
if(tabs.length){
_32a(_335,0);
}
}
};


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值