jQuery Address API文档——Methods(方法)

关于jQuery AddressEvents(事件)Functions(函数)部分请看《jQuery的历史插件》一文。

Methods(方法)

下面的方法以链接地址http://julabs.me/blog/address.php#/jquery/address.html?site=julabs&name=jon#welcome为例。

$.address.baseURL()

返回:String对象

获得文档的基地址,本例为:http://julabs.me/blog/address.php

$.address.autoUpdate()

返回:Boolean对象

获得自动更新模式的设置状态

$.address.autoUpdate(value)

返回:jQuery Address对象

设置自动更新模式是否可用,默认为可用。当它被设为可用时会在地址改变时执行jQuery Address对象的$.address.change函数,当被设为不可用时,可以用来命令$.address.update()触发$.address.change函数

$.address.crawling()

返回:Boolean对象

获得crawling模式的设置状态(这个我也不知道是做什么用的–!,可以不用管它)

$.address.crawling(value)

返回:jQuery Address对象

设置crawling模式是否可用,默认为不可用

$.address.hash()

返回:String对象

获得深层链接中的哈希值,本例为:welcome

$.address.hash(value)

返回:jQuery Address对象

设置深层链接中的哈希值

$.address.history()

返回:Boolean对象

获得历史模式的设置状态

继续阅读

发表在 前端 | 标签为 , , | 一条评论

Ajax同步请求会临时锁住浏览器

由于公司网页在加载时会用Ajax发送大量请求,服务器吃不消,就把Ajax请求设置为同步。但在页面加载时浏览器会出现停顿,刚开始我还以为是写的JavaScript效率不高,占用太多的内存,造成浏览器停顿现象。这两天无意中发现如果把Ajax请求设置为同步的话,浏览器会被临时锁住,在请求返回之前不能进行任何操作。它会临时中断所有的JavaScript命令,也不能点击按钮,甚至选择文本内容。

我是到这两天才发现这个问题的,和Ajax接触了这么多年才发现,看来我对Ajax基础知识了解地实在是太肤浅了,以后要加强基础知识的掌握了。关于Ajax的基础知识可以参看W3C的资料——《XMLHttpRequest》

解决方法可以参看《自动排队的异步Ajax请求》

发表在 前端 | 标签为 , | 留下评论

自定义jQuery插件Validate的remote方法

Validate是一个非常好的jQuery表单验证插件,但它有个最让我头疼的地方就是它的remote方法。remote默认用get的方法获得一个json格式的返回信息,而公司用的是XML格式。修改remote的返回格式方法,我在网上找了很久都没有找到,没办法,最后只有自己解决,通过多次试验,终于解决了。在此抛砖引玉,如果大家有更好的方法,可以在这里留言。

这里以Validate官方演示AJAX CAPTCHA做为例子来说明下。首先修改下process.php文件,原来的代码是

<?php
session_start();
if(strtoupper($_GET['captcha']) == $_SESSION['captcha_id'])
	echo 'true';
else
	echo 'false';
?>

原来的代码输出的是json格式,现在改成XML格式的:

<?php
session_start();
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><isvalid><result>';
if(strtoupper($_GET['captcha']) == $_SESSION['captcha_id'])
	echo 'true';
else
	echo 'false';
echo '</result></isvalid>';
?>

再改captcha.js文件,这里只例出需要修改的代码段:

remote: "process.php"

继续阅读

发表在 前端 | 标签为 , , | 一条评论

地铁怪事集合贴

以前在上海工作时,同事们经常用邮箱分享些有趣的笑话故事,一次发的就是这个《地铁怪事集合贴》,当时看了真有点百看不厌的味道。后来发现很多网站甚至报纸都引用里面的一些内容,我没事时也经常在网上搜下看看,无意中在篱笆网找到了它的原版,在这里做上记号,没准以后无聊时再翻开看看。

发表在 生活 | 标签为 , | 留下评论

数据之美

在以前一看到数据两字就头大,觉得很枯燥无味,但看了国外的一些数据图,大吃一惊,真有惊艳之感,不知道什么时候我才能够做出这样美妙绝伦的作品出来。

数据之美

发表在 设计 | 标签为 | 留下评论

区分IE8的hack

制做页面时最好使用IE条件注释判断语句的方法来区分浏览器,但在制做简单的页面时可以用hack的技术来加快制作。


body {
	color: red; /* 支持所有浏览器 */
	color : green\9; /* 支持 IE8 以及以下版本 */
	*color : yellow; /* 支持 IE7 以及以下版本 */
	_color : orange; /* 支持 IE6 */
}

IE9又快出来了,这样一来使用hack的难度又多了一分。

发表在 前端 | 标签为 , , , | 留下评论

Lazyload——JQuery图片延迟加载插件

Lazy Load是一个JQuery插件,它可以延迟下载页面中图片的。视点(viewport)以外的图片在你没有滚动到它的位置之前是不会显示的,这与图片预载的理念正好相反,但是它可以减少一些不必要的下载量。它的用法非常简单,在载入jQueryLazy Load代码后,再输入以下代码就可以了:

$("img").lazyload();

Lazy Load可以实现多种效果,如你可以让图片以渐显的方式显示:


$("img").lazyload({
	effect : "fadeIn"
});

Lazy Load图片显示的触发事件你也可以设置成clickmouseover


$("img").lazyload({
	event : "click"
});
发表在 前端 | 标签为 , , | 留下评论

先觉者与群众

摘自《华盖集续编·无花的蔷薇》,“何为不朽?不朽就是与后人产生共鸣!”

豫言者,即先觉,每为故国所不容,也每受同时人的迫害,大人物也时常这样。他要得人们的恭维赞叹时,必须死掉,或者沉默,或者不在面前。

总而言之,第一要难于质证。

如果孔丘、释迦、耶稣基督还活着,那些教徒难免要恐慌。对于他们的行为,真不知道教主先生要怎样慨叹。

所以,如果活着,只得迫害他。

待到伟大的人物成为化石,人们都称他伟人时,他已经变了傀儡了。

有一流人之所谓伟大与渺小,是指他可给自己利用的效果的大小而言。

发表在 文史 | 标签为 , , | 留下评论

Spry源码笔记——自动将Document转换成JSON格式

在运用Ajax中,有很多操作都是将获得的XML文档转换成JSON格式的,方便JavaScript操作。在Adobe Spry源码里发现了有专门进行这种转换的函数,大大减轻了工作量。我把它提取出来,做了一些改动。

首先创建一个函数,用于判断一个节点是否只含有文本内容:

/**
 * 判断该节点是否只包含文本节点
 * @param {Object} node 用于判断的 节点
 * @return {Boolean} 如果只包含文本内容为 true
 */
var nodeHasValue = function(node){
	if(node){
		var child = node.firstChild;
		if (child && child.nextSibling === null && (child.nodeType === 3 /* Node.TEXT_NODE */ || child.nodeType === 4 /* CDATA_SECTION_NODE */))
			return true;
	}
	return false;
}

下面是nodeToObject函数,是整个功能模块的核心,它的功能是把节点(node)转换成JSON格式:

/**
 * 把 Node 转换成 JSON 格式
 * @param {Object} node 用于转换的 节点
 * @requires EYoo.XML.nodeHasValue 判断该节点是否只包含文本节点
 * @return {Object} obj JSON 格式的信息
*/
var nodeToObject = function(node){
	if (!node)
		return null;
	var obj = {};
	// Add all attributes as properties of the object.
	for (var i = 0; i < node.attributes.length; i++){
		var attr = node.attributes[i];
		var attrName = "@" + attr.name;
		obj[attrName] = attr.value;
	}

	var child;
	// 判断该节点是否只包含文本节点
	if(nodeHasValue(node)){
		try{
			child = node.firstChild;
			if (child.nodeType == 3 /* TEXT_NODE */){
				obj[child.nodeName] = child.data;
			}else if (child.nodeType == 4 /* CDATA_SECTION_NODE */){
				obj[child.nodeName] = child.data;
			}
		}catch(e){
			throw("nodeToObject() exception caught: " + e + "\n");
		}

	}else{
		// 如果不是文本节点
		child = node.firstChild;
		while(child){
			if (child.nodeType == 1 /* Node.ELEMENT_NODE */){
				var isArray = false;
				var tagName = child.nodeName;

				// 如果已经存在该节点信息了,则转换成 Array 类型
				if(obj[tagName]){
					if(obj[tagName].constructor != Array){
						var curValue = obj[tagName];
						obj[tagName] = new Array;
						obj[tagName].push(curValue);
					}
					isArray = true;
				}
				var childObj = nodeToObject(child);

				if (isArray)
					obj[tagName].push(childObj);
				else
					obj[tagName] = childObj;
			}
			child = child.nextSibling;
		}
	}
	return obj;
}

继续阅读

发表在 前端 | 标签为 , , , , | 留下评论

《精通JavaScript》笔记——获得JavaScript对象的类型

在JavaScript中获得对象的类型有两个函数:一个是typeof,另一个是constructor

下面是使用typeof来判断对象类型的用法,它返回一个字符串:


var obj = "I'm string!";
alert(typeof obj === 'string');

constructor方法会返回一个构造函数:

alert(obj.constructor == String);

下面这个表展示了用上述的两种方法对不同类型对象进行类型检查的结果。

变量 typeof变量 变量.构造函数
{an:”object”} object Object
["an","array"] object Array
function(){} function Function
“a string” string String
55 number Number
true boolean Boolean
new User() object User

从这个表看来,把变量的构造函数作为对象类型引用是最不容易犯错的合法类型检查,通过name属性就可以获得对象类型的名称。

console.log(obj.constructor.name);

发表在 前端 | 标签为 , , , | 留下评论