`
deepthink
  • 浏览: 56475 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

对jQuery做的修改

阅读更多

jQuery 基本库确实给我们带来了很多的方便,但是因为其fn的扩展方式在项目中实在是灵活度欠缺;

而widget模式虽然具备了一定的灵活度,但是还是有一定的欠缺

 

下面是我对jQuery做了修改后写的一些代码

 

吸收了一部分prototype.js 面向对象的方式,抛弃了widget的扩展模式,抛弃了 tabs.tabs("swidth","12121") 这种调用模式,使用 obj.method(args) 的调用模式

 

添加了prototype.js 中 function(){}.bind(this,arg1,arg2) 的闭包模式,这样在面向对象中就解决了和jQuery 闭包调用this 的冲突

....

method1:function(){
       $.getJSON(window.cp + "/profile/" + dotx.conf.userName + "?act=loadGroup&group=" + groupId,this.showGroup.bind(this));
},
showGroup:function(group){...}
....

 

完整的模块js 代码

profile.js

 

 

;
(function($){
	
	$.dotx = $.dotx || {} ;
	
	$.dotx.Profile = clazz.create();
	
	$.extend($.dotx.Profile.prototype,{
		init:function(conf){
			this.groupIpt = $("#contact-group");
			this.itemsDiv = $("#contact-group-items");
			this.addBtn = $("#add-contact-btn");
			
			this.bindEvent();
		},
		
		bindEvent:function(){
			var t = this ;
			
			this.groupIpt.toggleBtn({
				callback:function(groupId,groupName){
					t.addBtn.html("<b>添加联系人</b>&nbsp;(" + groupName + ")");
					t.loadGroup(groupId);
				}
			});
		},
		
		loadGroup:function(groupId){
			var t = this ;
			
			this.itemsDiv.html("loading...");
			$.getJSON(window.cp + "/profile/" + dotx.conf.userName + "?act=loadGroup&group=" + groupId,function(group){
				t.showGroup(group);
			});
		},
		
		showGroup:function(group){
			this.itemsDiv.empty();
							
			var items = group.items || [];
			var i , len = items.length ;
			if(len > 0 ){
				for(i = 0; i < len ; i ++){
					this.addItem(items[i]);
				}
			}else{
				this.itemsDiv.html("分组无联系人");
			}
		},
		
		addItem:function(item){
			var groupId = this.getGroupId();
			
			this.itemsDiv.append("<div id=\"contact-group-item-" + item.id + "\" style=\"height:30px;line-height:30px;border-bottom:1px dashed #ccc;\">" 
					+ "<span style=\"width:177px;display:inline-block;\" title=\"@" + item.userName + "\">" 
					+ item.contactName  
					+ (groupId == "all" ? "<span class=\"desc\">&nbsp;(" + (item.groupName || "全部") + ")</span>" : "")
					+ "</span>" 
					+ "<a href=\"javascript:profile.deleteContact('" + item.id + "');void(0);\" class=\"link-btn-b\">删除</a></div>");
		},
		
		showAddContactWin:function(){
			var t = this ;
			
			var txt = "<div id=\"contact-add\"></div>" ;
			
			jQuery.prompt(txt,{
				loaded:function(){
					$("#contact-add").load(window.cp + "/profile/" + dotx.conf.userName + "?act=contactAdd&group=" + t.getGroupId());
				},
				
				buttons: {"关闭": false }
			});
		},
		
		deleteContact : function(contactId){
			if(window.confirm("确定删除该联系人么?")){
				
				jQuery.post(window.cp + "/profile/" + dotx.conf.userName + "?act=deleteContact&contactId=" + contactId,
					function(ret){
						if(ret)
							$("#contact-group-item-" + contactId).remove();
					}
				);
			}
		},
		
		searchContacts:function(){
			var keyword = $("#contact-search-keyword").val();
			
			var div = $("#contact-group-search-items");
			
			if(keyword){
				div.html("Loading...");
				
				div.load(window.cp + "/profile/" + dotx.conf.userName 
						+ "?act=searchContacts&keyword=" + keyword);
			}
		},
		
		addContact:function(userId){
			var t = this ;
			
			var groupId = this.getGroupId();
			
			$.post(window.cp + "/profile/" + dotx.conf.userName + "?act=addContact&user=" + userId + "&group=" + groupId,function(){
				t.loadGroup(groupId);
			});
		},
		
		getGroupId:function(){
			return this.groupIpt.val();
		}
	});
})($);

 

base.js 基本包,需要引入

 

;
(function($){
		
	
	/* prototype.js 中 的方法绑定模式 ---------------------------------------------------------- */
	
	
	Function.prototype.bind = Function.prototype.bd = function(){
		var method = this ;
		var obj = arguments[0];
		
		var args = arguments;
		
		return function(){
			var newArgs = [];
			var i ,len = args.length ;
			if(len > 1){
				for(i = 1; i < len ; i ++){
					newArgs.push(args[i]);
				}
			}
			
			len = arguments.length ;
			for(i = 0 ; i < len ; i ++){
				newArgs.push(arguments[i]);
			}
			
			method.apply(obj,newArgs);
		}
	};
                   
                // 面向对象的修改	

	window["class"] = window.clazz = {
		create:function(){
			function klass(){
		      this.init.apply(this, arguments);
		    }
			
		    if (!klass.prototype.init)
		      klass.prototype.init = function(){} ;
			
		    klass.prototype.constructor = klass ;
		    return klass ;
		}
	};
})(jQuery);

 

 

分享到:
评论

相关推荐

    jQuery实现动态更改table表格数据

    同时,确保对不同浏览器的良好兼容性也是至关重要的,因为虽然jQuery提供了很好的跨浏览器支持,但某些特定的CSS属性或DOM操作可能仍存在差异。总的来说,jQuery为动态更新表格数据提供了一个简洁、高效的解决方案。

    jquery做的日历小例子

    这个“jquery做的日历小例子”是利用jQuery来创建一个实用的日历组件,可以帮助开发者快速实现网页上的日期选择功能,常见于表单验证、预约系统或者时间管理应用中。 首先,让我们深入了解jQuery如何实现日历功能的...

    jQuery基础.pptx

    轻量级,“写的少,做的多” 包含以下功能: HTML元素选取 HTML元素操作 CSS操作 HTML时间函数 JavaScript特效和动画 HTML DOM遍历和修改 AJAX(异步 JavaScript 和 XML。) 2、jQuery优势 目前网络上有大量开源的 JS...

    jquery-3.4.1_jquery_3.4.1.js_jquery-3.4.1_sangat1_jquery3.4.1_jq

    通过引入"jquery-3.4.1.js",开发者可以轻松地实现各种前端功能,如动态修改DOM、创建流畅的动画效果、实现异步通信等。结合"说明.txt"中的指导,可以更有效地利用jQuery进行Web开发。无论是新手还是经验丰富的...

    jquery 排序, jquery 动态修改列

    本文将深入探讨“jQuery排序”和“jQuery动态修改列”这两个主题,结合给定的“ajax_commit.js”文件名,我们也将探讨jQuery如何与Ajax交互。 首先,让我们了解jQuery的排序功能。在网页开发中,对表格数据或者列表...

    jbox2.3修改版,可用于jquery1.8以上 兼容jquery 高版本

    jbox2.3 由于更新停止,目前在jquery1.8以下使用正常。但由于jquery1.9取消了$.browser.msie方法,导致高版本jquery无法使用。本文件使用其它判断方法替换了$.browser.msie,实测在jquery1.9以上可使用。

    jQuery修改标签内容实例

    使用jQuery修改它的内容如下: ```javascript $('#link').text('新的链接文本'); ``` 这行代码选择ID为`link`的元素,并将其文本内容替换为“新的链接文本”。 2. **修改`&lt;span&gt;`标签内容**: 同样,我们可以...

    jquery例子大全 jquery demo

    jQuery对象提供了许多方法,如 `.html()` 用于获取或设置元素的HTML内容,`.css()` 用于修改样式,`.click()` 用于绑定点击事件等。 ### 二、jQuery 动画效果 jQuery 提供了一系列的动画效果,如 `.fadeIn()`, `....

    Jquery下載,Jquery-3.5.1

    2. **DOM 操作**: jQuery 提供了方便的方法来创建、修改和删除 DOM 元素。例如,`$( "&lt;div&gt;&lt;/div&gt;" ).appendTo( "#container" )` 可以在 ID 为 "container" 的元素后面添加一个新的空 div。 3. **事件处理**: 使用 ...

    用Jquery做的一个简单的拼图游戏

    【标题】:“用Jquery做的一个简单的拼图游戏” 这篇标题揭示了我们即将探讨的是一个基于JQuery开发的简易拼图游戏。JQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画设计和Ajax交互。在...

    jQuery做的2048小游戏

    jQuery提供了方便的API,如`$(selector)`用于选择元素,`html()`或`text()`用于读取或修改元素内容,以及`append()`、`prepend()`等方法用于动态添加或删除元素,使得创建和更新游戏板变得简单。 2. **事件绑定**:...

    jQuery树控件的拖动修改各种特效

    本教程将详细探讨如何实现jQuery Treeview的拖动修改各种特效,帮助开发者提升用户体验并实现更加动态的交互效果。 一、jQuery Treeview 基础 首先,我们需要引入jQuery库以及jQuery Treeview的CSS和JS文件。确保...

    JQuery alert confirm prompt 修改版

    在网页开发中,"JQuery alert confirm prompt 修改版"通常指的是开发者对原生JavaScript中的alert、confirm和prompt函数进行了自定义或者增强,以提供更美观、功能更丰富的对话框体验。 原生JavaScript的alert、...

    经典Jquery修改版本

    Jquery经典修改增强版本,非常不错。

    jquery-migrate: 迁移旧的jQuery代码至jQuery1.9以上的版本

    这样,开发者可以在不立即重构所有代码的情况下,逐步更新项目,避免了大规模的代码修改带来的风险。 **2. 使用jQuery Migrate** 要使用`jQuery Migrate`,首先需要在HTML文件中引入`jQuery`和`jQuery Migrate`的...

    jquery修改滚动条样式

    `jQuery`通过选择器选取DOM元素,然后对这些元素进行操作。对于滚动条的样式修改,我们主要关注`::webkit-scrollbar`和`::webkit-scrollbar-part`这两个伪元素,它们分别代表滚动条整体和滚动条的各个部分(如轨道、...

    jquery高亮图片框 jquery图片展示 jquery效果很好

    要实现这个效果,可以使用jQuery的选择器来选中图片框元素,然后通过`.css()`方法修改样式。例如,当用户鼠标悬停在图片框上时,可以编写以下代码: ```javascript $('.image-box').hover(function() { $(this)....

    jQuery-webcam分辨率640*480

    jQuery webcam plugin是一个兼容各浏览器的摄像头插件,资源根据官网(http://www.xarg.org/project/jquery-webcam-plugin/)下载的源码和网上的Demo做了部分修改,主要解决以下问题:1、修改官方分辨率320*240为640...

    jquery-1.9.1.js 、jquery-1.9.1.min.js 【官方jquery包 js】

    jQuery 1.9.1版本是一个重要的里程碑,它对旧的API进行了清理和重构,移除了一些不推荐使用的函数和方法,以保持库的简洁性和未来发展的兼容性。例如,`.live()`方法在这一版本中被移除,取而代之的是`.on()`和`.off...

    jquery-3.5.1.rar

    本次提供的“jquery-3.5.1.rar”文件,包含了jQuery的核心库版本3.5.1,这是对这个经典库的一个稳定更新。在本文中,我们将深入探讨jQuery的基础知识、核心功能以及3.5.1版本的主要改进。 一、jQuery简介 jQuery是...

Global site tag (gtag.js) - Google Analytics