用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]

多行正则替换子目录中HTML注释中的内容

在虚拟机里的XP里写的,用于替换当前目录的子目录中HTML文件中特定的一段,用注释包起来的。
最近做个项目菜单导航很麻烦,页面非常多,但又是纯静态的,超麻烦。所以写个来以后批量改菜单导航。当然也是因为我不喜欢用DW,而拼死用EP手工写代码的“恶果”。DW有模板的……

这个东西用了我当年写大ass2str的样式~
正则用了JS,文件读写用VBS,请用文本编辑器保存为wsf后双击执行(windows scripting file)
for win only。Linux达人我就对不住了。

[quote]



/*
* 批量修改子目录中HTML的目录
*
* Copyright (c) 2008 Shawphy (shawphy.com)
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
*
* $Date: 2008-04-26 02:51:33 +0800
* $Rev: 1 $
*
*当前文件夹下子目录中的所有HTML文件中
*
*之间的内容都将被替换成
*当前文件夹下menu.txt文件的内容
*
*注:要求所有文件为utf-8编码
*
*/
]]>





[/quote]
JS写正则就是爽啊,VBS写文件读写也很爽~上面那个wsf文件还符合xml标准呢~

今日Ubuntu

昨日下载下来,急忙装下,今天一天都在整这玩意
用下来不得不说比之前其他大几个发行版好很多。apt-get超级方便阿~~~
感谢世界各地提供的源

用到最后不得不说,我这搞前台的没办法用LINUX,为啥,因为里边没IE……
我费了好大的劲给安了个ies4linux,结果运行速度实在不令人满意,毕竟基于wine的啊……
不过基本大功能都能实现了,网银啊,支付宝都恩用了。

心不死,干脆按个虚拟机玩,就按出了个virtualbox。小有波折,不过还是可以了,
居然跟scim冲突,努力就卸载了,现在用fcitx呢。

有了WINXP,自然有了IE6/7,还有我钟爱的EDITPLUS阿……
写前台的总不能就窝在LINUX的FF下过日子吧,肯定没多久被炒鱿鱼了……

基本上更多的一时也没法体会,暂时就写到这里。

button元素比起input的优势

实际上button和input两个都可以用来做按钮,而且格式非常相似

  1. <button type="button">asfd</button>
  2. <input type="button" value="asfd">

但是,button比起input来说可以提供更加丰富的内容
因为里边是可以包含HTML标签的
这样就可以做到如下的效果

  1. <button type="button">
  2.     <img src="/images/smilies/Face_02.gif" />
  3.     <strong>OK</strong>
  4.     <em> ,I"m.</em>
  5. </button><br />
  6. <input type="button" value="input">

怎么样,用传统的input做不到吧

但是务必注意,type在FF下,是必须的。否则如果一旦这个button出现在form中(ASPX常常会这样)而未加上type=”button”的话,就会提交表单的!

他支持submit/reset/button
当然也有value属性~
更多参数可以参考

总之强烈推荐用button代替input,更符合语义,即,这里我想要一个按钮,而不是一个什么“输入”的东西
英文:

http://www.w3schools.com/tags/tag_button.asp

中文:

http://www.w3school.com.cn/tags/tag_button.asp

标准化布局与实时切换CSS

今天花了点时间,彻底的写了一个两栏布局,IE6/7和FF下彻底完全一样了,另外两个OP和SF暂时不高兴管了。

同时写了一个切换CSS,即网站换肤功能。最近很流行的,一写才发现果然非常简单。
两三行搞定的。主要思想就是给link元素设定ID,然后用getElementId来获取后改变href值。超EASY
具体可以看这里的DEMO

http://shawphy.com/demo/changecss/changecss.html

唯一的缺憾是FF下对于未加载的样式会闪一下,当然他是对的……
因为我已经改变了样式,那老的自然应该消失,而新的没载入完,那自然还没呈现,所以有瞬间的闪一下。
不过虽然很正确,可惜少了点人性化……

 下次有空再测试IE8吧~

P.S. 今天更新一下,用了jQuery的读写Cookie的插件,现在可以保存设置到Cookie里了~本功能就此打住,不再更新


jQuery(function() {

	//读取cookie
	$("#changecss").attr("href","css/"+$.cookie("style")+".css");
	$("#sidebar>ul>li>a").click(function() {

		//设置link元素的href属性
		$("#changecss").attr("href","css/"+$.trim($(this).text())+".css");
		$("#headerMain").html($(this).text());

		//写入cookie,1年过期
		$.cookie("style",$.trim($(this).text()),{ expires: 365})

		//去除a上难看的虚线框
		this.blur();

		//不触发默认鼠标事件
		return false;
	}).css({"width":"220px","display":"block"});
});

jQuery 1.2 cheatsheet


在官网上逛的时候,看到这么个东西,以前就只有1.1的现在有1.2版的了,分享一下[face02]

注:selector部分的那个@符号其实在1.2中已经不需要了。