jQuery 1.2.6的更新内容,以及文档5.29日重要更新

文档又更新了
但愿大家别烦,饶恕我这几天忙没办法一次性更新。只能更新点放出点。

2008-05-29 16:36:07 +0800
+ 核心 部分 数据缓存
+ 工具inArray函数
* noConflict注释

另外看到1.2.6中有上一版1.2.3里没有的几个函数,官网文档还没跟上,我就自己随手写点。不放进中文文档了。

感谢Cloudream 提醒~~失误了,这个就是Dimensions插件里的,1.2.3里只提供了offset,再加上早先的height,width,到现在已经完全把这个插件加进来了。
Dimensions插件已然融入jquery了:

offsetParent
用于检测对应元素实际的相对偏移的父对象
返回值:jQuery
示例:
<div id=”p” style=”position:relative”>
<div>
<div id=”c” style=”position:absolute;left:30px”>dd</div>
</div>
</div>
$(“#c”).offsetParent()[0].id    // p

position
用于检测实际的相对偏移,相对于上面那个函数所取得的对象。
返回值{top:xxx,left:xxx}
示例:
$(“#c”).position().left //30

scrollTop,scrollLeft
用于元素内部的滚动条,比如一个textarea,可以用来滚动
JQ传统咯,即可以设置也获取值

innerHeight, innerWidth
用来获取元素实际内部大小
innerHeight=height+paddingTop+paddingBottom

outerHeight,outerWidth
用于获取元素实际外部大小。

如果使用outerHeight()则返回值为
height+borderTop+borderBottom

如果使用outerHeight(true),则返回值为
height+borderTop+borderBottom+marginTop+marginBottom

好了,基本就这些了。暂时感觉没啥用处,实际项目的时候可以把这些删除掉,然后再用packer打包。

jQuery 中文文档AJAX部分再度更新

发现官网更新了,我这也更新一下。
之前下过离线版的可以再下载一下。
更新了AJAX部分
修正了scroll的示例代码

在线查看地址:http://shawphy.com/jqueryapi/
离线版下载:http://shawphy.com/jqueryapi/jqueryapi12.zip

有空的朋友可以一起来SVN维护
svn checkout http://jquery-api-zh-cn.googlecode.com/svn/trunk/ jquery-api-zh-cn-read-only

jQuery 1.2.6 发布

这回紧急修正了2个BUG的
主要是内核上的val的问题,用val设置 select的时候有时候会出问题。
一个是attr问题,导致了Validate插件的崩溃

有条件么,升级一下吧。

http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.pack.js
http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.js

jQuery 1.2.5 发布

前几天发布了1.2.4,结果没过一天就发布了1.2.5
而实际访问SVN会发现两个版本之间,jQuery主体丝毫没有什么变化过。
我就纳闷了。jQuery搞什么飞机啊……

http://docs.jquery.com/Release:jQuery_1.2.5
发布信息里只有一条:jQuery 1.2.5 was available only one day after 1.2.4

囧……

然后就引导我们看1.2.4的发布记录:
http://docs.jquery.com/Release:jQuery_1.2.4

可以找到如下网址:
http://www.nabble.com/1.2.4-missing-patches–td17354452s27240.html

里边提到,看来是john的电脑貌似有点冲突,所以make坏了。做了一个bad build。
缺了http://dev.jquery.com/ticket/2567这个补丁。
而现在他正在外面游山玩水~~~大概12天后回来

好了,那就用1.2.5吧。修正了众多Bug
下载地址:
Minified, Packed, Uncompressed

用jQuery 选择器选取包含特殊字符的元素

当使用jQuery选择器的时候,如果id里包含#:[]之类的特殊的符号,或者xml里有如这样的,一般情况下是无法选到的。
这个时候可以使用一些技巧来选择相关的内容。
使用转义字符,并且使用两个即可
比如要选择id为a:1的元素
可以写成$("#a\:1")。
当然也可以写作$("[id=a:1]")。
当然,效率哪个高大家都知道~
而且,如果要处理XML的话就没这么容易了。

这种,只需要$("adb\:aaa")即可

具体实现原理么,不是很明白。以前wzmaodong写表单验证的时候也出现过类似的问题。所以这回才想起来的。

他的解释是“采用的是显式构造函数new RegExp("pattern"[,"flags"]); 由于Javascript 中'' 被用作转义字符,所以在使用显示构造函数构造实例对象的时候,需要使用'\' 代替''”

但是我就纳闷了,我一个选择器难道jQuery内部也做正则去了么?明明是被正则解析啊。迷茫了。

[html]

fail

[/html]

精通JavaScript读书感想

这本书英文名是Pro JavaScript Techniques。是jQuery之父John Resig所写的。
书中的内容确实比较高级些,并非如犀牛书般的只是基础而已。
这本书看下来的感觉就是:果然是JQ之父写的!
为什么这样说呢,因为这本书可以说是JQ的源码解读。这里的很多篇幅都可以看做JQ的一些方法的原型实现。
包括选择器,attr,insert,append,remove等,还有event注册等方法。
如果你想要体会JQ是如何炼成的,看这本书是最好不过的了,对于你对JS的理解会上一个层次,了解JQ编写的原理,体会到大师的想法。
当然看了这个之后自然就看到了大师的师傅,Dean Edwards,这个牛人就是著名的JS压缩利器parker的作者。他写的cssQuery可以说是jQuery的最初的想法。但我们的John Resig很快发现光是选择器,比不过cssQuery,但是封装更丰富的操作那是很好很美妙的事情。

同时,这本书也介绍了一些未来的javascript 1.6/1.7.
这些已经在Firefox中完全实现了(1.6在FF1.5以上,1.7在FF2以上,1.8在FF3以上)。有兴趣的可以参考这里。这里不光有1.6.1.7,还有1.8的参考。(部分英文)
另外,
期待着下面的语句

var a=

最后,为地震灾区所有人民祈福……

jQuery JSON 简单demo

今日整了半天好不容易把json搞定。。。。
发帖留念一下。。。。
demo地址:http://shawphy.com/demo/json/json.html

估计是一开始json 格式没搞对,

[quote]{
"addressbook": {
"name":"peter",
"address":{
"city":"New York",
"street":"abc rd",
"no":"1"
}
}
}[/quote]

服务器端只管输出一个字符串即可,不用关心什么contentType啥的。

[quote] $(function() {
$("#gj").click(function() {
$.getJSON("json.asp",function(json) {
alert(json.addressbook.address.city);
})
});
$("#aj").click(function() {
$.ajax({
type:"post",
url:"json.asp",
dataType:"json",
data:{abc:"ab"},
success:function(json) {
alert(json.addressbook.name);
},
error:function() {
alert("error");
}
});
});
})
[/quote]

jQuery UI 1.5b4 发布

原文:
http://jquery.com/blog/2008/05/05/jquery-ui-15b4-featuring-effects-and-a-new-home/

近日1.5的b4发布了,看发布日志来看,貌似先发布了b3,结果发现恶性bug,于是没几个小时又发布了b4,跳过了b3了。
据声称,已经修复了50多个bug,还剩下5个主要的bug修复就好了。这个版本将是最后的测试版了,再过几天就能发布正式版了。

还有,jQuery Enchant 也会成为jQuery UI的一部分,提供了很多新的动画特效。据说要提供15种特效,包括了script.aculo.us中的一些(blind,bounce,drop,fold,slide …),还有些新的(transfer, explode. clip, scale)

同时,http://ui.jquery.com的页面也重新做过了。果然是比以前好看了不少,(虽然以前也不错)。不过,jQuery UI依然感觉不是很好用。。。而且也不是很漂亮。。。唉。。。。难道真的要用ext去么。。。

下载地址:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery.ui-1.5b4.zip

jQuery的浏览器兼容性策略

之前写过一篇日志(http://shawphy.com/article.asp?id=34),说FF没有cancelBubble,所以要做兼容,其实多虑了,JQ已经为我们做好兼容性了。
也就是说,要阻止冒泡,直接使用
$("a").click(function(e) {
e.stopPropagation();
})
这样即可。
她还修正了preventDefault ,target ,relatedTarget,pageX/Y,event.which(确定按了键盘或者鼠标上的哪个按键。)

多的不说,大家自己看代码吧(jQuery 1.2.3 /line:2093-2149)

[quote] fix: function(event) {
// store a copy of the original event object
// and clone to set read-only properties
var originalEvent = event;
event = jQuery.extend({}, originalEvent);

// add preventDefault and stopPropagation since
// they will not work on the clone
event.preventDefault = function() {
// if preventDefault exists run it on the original event
if (originalEvent.preventDefault)
originalEvent.preventDefault();
// otherwise set the returnValue property of the original event to false (IE)
originalEvent.returnValue = false;
};
event.stopPropagation = function() {
// if stopPropagation exists run it on the original event
if (originalEvent.stopPropagation)
originalEvent.stopPropagation();
// otherwise set the cancelBubble property of the original event to true (IE)
originalEvent.cancelBubble = true;
};

// Fix target property, if necessary
if ( !event.target )
event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either

// check if target is a textnode (safari)
if ( event.target.nodeType == 3 )
event.target = originalEvent.target.parentNode;

// Add relatedTarget, if necessary
if ( !event.relatedTarget && event.fromElement )
event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;

// Calculate pageX/Y if missing and clientX/Y available
if ( event.pageX == null && event.clientX != null ) {
var doc = document.documentElement, body = document.body;
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) – (doc.clientLeft || 0);
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) – (doc.clientTop || 0);
}

// Add which for key events
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
event.which = event.charCode || event.keyCode;

// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
if ( !event.metaKey && event.ctrlKey )
event.metaKey = event.ctrlKey;

// Add which for click: 1 == left; 2 == middle; 3 == right
// Note: button is not normalized, so don't use it
if ( !event.which && event.button )
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));

return event;
},
[/quote]