jQuery Autocomplete plugin

写的比较满意,拿出来分享,欢迎大家找BUG。

相对于同类插件,他的特色有3点。
1、可缓存查询结果 (二次查询速度快)
2、非keyup监听方式 (解决某些系统/情况下无法触发keyxxx事件的问题)
3、简洁的参数 (好看?)

插件性能尚好,我的E6500、2G内存,30秒内一共发生了4469次调用,耗时94.65毫秒;百度的是2432次调用,80.24毫秒。

接近1倍的调用是jQuery中的问题,但具体原因我还没弄明白,如果那位兄弟知道的还请不吝赐教。

调用方法

jQuery("#kw").suggest({
	url:siteConfig.suggestionUrl,
	params:{
		kw:function(){return jQuery("#kw").val()},
		n:10
	}
});

参数url:baseUrl,例如http://www.target.com/search.php
参数params:url的后缀列表,范例中拼合的url为:http://www.target.com/search.php?kw=xxx&n=10&callback=?(默认加入callback)
参数delay:输入间隔时间,主要是为了降低负载,数值越大,负载越低,查询速度越慢。
参数cache:是否实用缓存,默认为true,例如当搜索“test”时,程序会将对应的查询结果缓存,当第二次搜索test时直接从缓存中读取。
参数formId:必须填写,form表单的id
参数callback:是否使用jsonp以便处理跨域问题。


点击下载源码

原文链接(84 views)|评论 (5)

利用控制器载入对应脚本

因项目开发需要,须将每一个方法都独立成单独的js文件以便载入、维护,所以,必须需要有一个控制器用于载入这些方法。

我的思路是,在编写独立模块的时候,注意将这些方法集成到$.tools对象中,接下来,在页面中,调用控制器载入模块,并在载入完成后判断$.tools中对象的个数与预定义载入的模块数是否相等,如不等继续等待,如相等执行回调函数。

/*
* LOADScript Mod
* Params url1,url2,url3,url4,fn
*/
jQuery.extend({
	loadMod: function(){
		var argleng = arguments.length,
				arglast = arguments[argleng-1],
				fn = false,
				queue = [],
				checknum = 0,
				timer = null
		;
		// init
		if(jQuery.isFunction(arglast)){argleng = argleng -1;fn=arglast;}
		for (var i=0;i<argleng ;i++){
			queue.push(arguments[i]);
		}
 
		// getscript
		jQuery.each(queue,function(i,o){
			jQuery.getScript(o);
		});
 
		// check load ready?
		loadReady();
 
		function loadReady(){
			if(jQuery.tools != undefined){
				checknum = 0;
				$.each(jQuery.tools,function(i,n){
					if(jQuery.isPlainObject(n)){checknum++;}
				});
			}
			if(checknum != argleng){
					clearTimeout(timer);
					timer = setTimeout(loadReady, 100);
			}else{
					if(!!fn){fn.call(document.jQuery)}
			}
 
		}
	}
});
 
// 使用方法
$.loadMod('a.js','b.js','c.js',function(){
  alert('success!');
});

原文链接(28 views)|暂无评论(赶紧抢沙发)

jQuery Tab plugin

因为觉得网上的都太麻烦,于是自己写了一个简单的,只是做tab的切换。

演示地址:http://www.zhangjingwei.com/demo/tab/

下载地址:源代码

原文链接(69 views)|暂无评论(赶紧抢沙发)

纯数字不重复排列的另类方法

方法不是主流的。

有一组数据,大概10万个左右,每一单位的值不会大于30000,要求按照由大到小的顺序不重复输出。

参考无忧cosin的方法后(多谢),整理的方法如下

//一段随机数,模拟用
var baseNum=[];
for(var i= 0;i< 100000 ;i++){
 random = Math.floor(Math.random()*i);
 baseNum.push(random);
}
var baseNumLen = baseNum.length;
var numSubscript = [];
//将数字作为下标和值放到另一数组内,实现排序和不重复
for (var i =0;i<basenumlen ;i++){
 if(numSubscript[baseNum[i]] == undefined)numSubscript[baseNum[i]]=baseNum[i];
}
//去除空的值并颠倒一下
baseNum = numSubscript.join(',').replace(/([,]+)/ig, ',').split(',').reverse();
document.write(baseNum);
题外:
假如数组是自己生成,客服果果写的这段代码就很好了。(牛逼)
var baseNum=[],tmp={},v;
for(var i= 0;i< 100000 ;i++){
        tmp[Math.floor(Math.random()*i)]=true;
};
i=0;
for (var k in tmp){
        baseNum[i++]=k;
};
baseNum.sort(fn);
function fn(x,y) {
        return x-y&gt;0?1:-1
}
document.write(baseNum.join(''));

原文链接(35 views)|暂无评论(赶紧抢沙发)

jQuery Select(单选) 模拟插件 V1.3.6

a、增加了onchange事件。(谢谢fjgysai)

b、可以支持方法连缀了。

c、修正opera下的笔误。

d、可支持jQuery的选择器了

下载地址:http://www.zhangjingwei.com/demo/jQuery.Select/index.html

您可以自由的使用这个插件在任何项目上。(商业、非商业)
希望您可以补充完善这个插件。

原文链接(438 views)|评论 (22)