限定字符长度,截断中文字符

今日遇到个麻烦事。input限定输入字节数是8,中文自然算两个字节。本来一路顺利,keyup keydown keypress事件挨个试过去,把中文用正则替换成两个英文字符,超过8的就return false。ie下表现超级完美。
这个时侯Firefox下麻烦事就开始了,ie下,中文输入法状态下他也是能捕获键盘事件的。但ff下却无法捕获输入法状态下的键盘事件,比如我搜狗,他只能识别到最后那次空格……一恼火,干脆换条思路,直接截断字符来解决。效果感觉还行,总比没有好,此方法也适用于复制进去的文本。

  1. $("input").bind("keyup",function() {
  2.     var str=this.value;
  3.     while (str.replace(/[^\x00-\xFF]/g,"aa").length>8) {
  4.         str=str.substr(0,str.length-1);
  5.     }
  6.     this.value=str;
  7. });

代码很简单,也很安全。想封装成其他形式请自便。

我这里用的是减法,对于input这种很合适。因为不会多出去很多字符的。
这里我事后搜到一个做加法的,也不错,可以参考一下。只是不建议像他这样直接给原生对象做扩展,容易冲突。放到自己的私有对象下会比较好。

我又回来啦

经历了一系列的波折,我的博客又开咯。考虑了半天,还是放在国外安全。就算被墙了,我的数据还能翻墙捞回来。国内就难说了。不想多提了。谨以此悼念……

应Ben所求,我放上博客服务器提供商 WOPUS IDC
国内有不少博客都是用他的,我是从 saywp.com这里看来的。
服务挺好的,速度也挺快。算是拿人手短吃人嘴短地推荐一下吧。

=============
Update
大概在09年7月左右,由于发现这个速度也比较慢,所以我后来就直接去Hostmonster买了空间,不再通过国内的代理商了。
我也建议有信用卡的同学直接去美国找服务商,而不要找中间代理商。毕竟中间隔了一层会比较麻烦一点。

侧边栏的twitter

最近开始用twitter了(彻底放弃饭否,用饭否的同学别伤心啊~),顺便在侧边栏放了一个用于显示tw更新的小面板~常来看的同学可能已经发现了侧边栏的小变化了~~(哦?你是订RSS的?非常支持!那麻烦你点一下本文链接就能看到啦,哈)

跑到 http://twitter.com/badges一路next后得到了一串代码

  1. <div id="twitter_div">
  2. <h2 class="sidebar-title">Twitter Updates</h2>
  3. <ul id="twitter_update_list"></ul>
  4. <a href="http://twitter.com/Shawphy" id="twitter-link" style="display:block;text-align:right;">follow me on Twitter</a>
  5. </div>
  6. <script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
  7. <script type="text/javascript" src="http://twitter.com/statuses/user_timeline/Shawphy.json?callback=twitterCallback2&amp;count=5"></script>

到wp后台建了两个小文本,一个用于存放上面的ul,另一个用于放js,由于twitter的js加载速度实在糟糕,我不得不分开放,把js放在侧边栏最底下的地方,这样好不影响页面加载。(其实还是影响到了footer,但我都不在乎,你在乎么? XD)

ok,你玩twitter么?玩的话follow me~

jQuery 1.2.6和jQuery 1.3.1的特殊字符选择器极限测试

心血来潮,把键盘上能按出来的特殊字符都按了个遍
依次是:
~`!@#$%^&*()_+{}|”:?><,./;'[]\
其中<和"不能放到id里,页面显示不全之外其他都可以哦~
分别放在中间,结尾和开头,比如te[st、te[、[st这种。
好孩子不要学哦~
W3C规定

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens (“-”), underscores (“_”), colons (“:”), and periods (“.”).

ID和NAME必须由字母([A-Za-z]) 开头,之后可以跟任意数量的字母、数字([0-9])、短横(“-”)、下划线(“_”)、冒号(“:”)和点(“.”)。

实验结果表明,jQuery 1.3.1的选择器对于这些BT的特殊字符没有jQuery 1.2.6强劲,jQuery 1.2.6基本上是getElementById能搞定的他都能搞定,而1.3.1中的Sizzle选择器却没这么强悍,当然这纯属测试而已,同时提醒各位同学,一定要尊崇标准啊……不要随便乱来……我知道某些会输出诸如foo[bar]之类的ID,不可取啊,不符合标准的啊……虽然#foo\\[bar\\]是能成功匹配的,但#foo\\[bar就不行。总之注意别用这些离奇的符号做ID就差不多不会有问题了。

测试页面在这里:
http://shawphy.com/demo/selector/jQuery-1-2-6-selector-test.html
http://shawphy.com/demo/selector/jQuery-1-3-1-selector-test.html

测试结果,
1.2.6:三个失败

te\st
te\
\st

1.3.1:一坨……

te~st
te(st
te+st
te[st
te\st
te>st
te,st
te~
te(
te+
te[
te\
te>
te,
~st
(st
+st
[st
\st
>st
,st
================
dev maillist发了邮件,John大回复说似乎可以解决,期待一下吧。

================
这个bug已经在1.3.2中修复,1.4.2中也通过了测试。
http://shawphy.com/demo/selector/jQuery-1-3-2-selector-test.html