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)|暂无评论(赶紧抢沙发)

CSS3 的显示与隐藏

演示地址:http://www.zhangjingwei.com/demo/css-menu.html

< !DOCTYPE html>
<head>
   <title>menu mockup</title>
   <style type="text/css">
      .show {display: none; }
      .hide:focus + .show {display: inline; }
      .hide:focus { display: none; }
      .hide:focus ~ #list { display:none; }
      @media print { .hide, .show { display: none; } }
   </style>
</head>
<body>
   <p>Here's a list</p>
      <div>
         <a href="#" class="hide">[hide]</a>
         <a href="#" class="show">[show]</a>
         <ol id="list">
            <li>item 1</li>
            <li>item 2</li>
            <li>item 3</li>
         </ol>
      </div>
   <p>How about that?</p>
</body>

原文链接(37 views)|评论 (2)

jQuery Tab plugin

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

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

下载地址:源代码

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

Rel与CSS的联合使用

Rel-License 是微格式的开发标准之一,简单的说就是通过给引用标签(通常是链接)加上REL属性,来标明所引用链接/数据与文章的关系。

WordPress很早就引入了rel标准,在我们添加新链接的时候就可以看到“关系”属性。

早期某些社交类搜索引擎可根据这个标签来判断人与人之间的关系,但它对网页开发来说并无意义,值得庆幸的是随着浏览器的逐渐升级,我们可以利用CSS属性选择器以及REL来做一些有意思的功能。

这是一段带有REL属性的HTML结构。

<ul>
<li><a href="#" rel="civil">小李</a></li>
<li><a href="#" rel="party">局长</a></li>
</ul>

页面中他呈现这个样子
example_01

因为局长和小李是两个不同的阶级,所以我们应该有区分他们,我打算在小李和局长后面增加两张图片让他表现出这个样式。
e2

过去,我们需要在两个链接标签上增加不同的class来实现这种样式,并且我们需要针对不同的样式书写不同的CSS

 .c,.b {background:url(01.png) right center no-repeat;}
 .b {background-image:url(02.png);}
<ul>
<li><a href="#" rel="civil" class="c">小李</a></li>
<li><a href="#" rel="party" class="b">局长</a></li>
</ul>

现在,我们可以利用REL属性以及属性选择器来完成这个工作。

a[rel~="civil"]{background:url(01.png) right center no-repeat;}
a[rel~="party"]{background:url(02.png) right center no-repeat;}

同时,我们的HTML结构也可以剔除那些多余的样式了。

<ul>
<li><a href="#" rel="civil">小李</a></li>
<li><a href="#" rel="party">局长</a></li>
</ul>

另外:ie6不支持属性选择器,但我们可以用JS来修复这个问题。

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