时光博客 - WEB开发中的可用性和用户体验
2009年11月的文章

jQuery Object and Dom

项目碰到一个问题,问题大概是这样的:

  1. <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
  2.     <tr class="line1" filetype="a"> 
  3.       <td></td> 
  4.     </tr> 
  5.      <tr class="line2" filetype="b"> 
  6.       <td></td> 
  7.     </tr> 
  8.   </table> 

需要对上面table的每个tr(N行)绑定事件,对filetype="a"和filetype="b"的绑定不同的的右键菜单。右键菜单是通过jQuery插件contextmenu实现的。

想绑定事件,自己只能想到2种方案:

  • 第一:使用jquery的选择符分别筛选出filetype为a和b的。
  • 第二:使用普通的dom对象,通过getAttribute实现。

第一种方法尝试了,发现jQuery不支持自定义选择符,也就是类似 $("input[name='newsletter']")的标签。可能也有,但是由于项目紧没有去尝试。

第二中方法,使用普通的DOM对象来获取不同的filetype,然后给tr做绑定,但是问题来了,jQuery的插件只支持jQuery对象。上网搜索了下发现原来DOM对象转换成jQuery对象非常简单,只要在DOM对象外面加入符号"$"就可以了。比如

  1. //普通的DOM对象 
  2. var otrs = document.getElementById("filelist").getElementsByTagName("tr"); 
  3.  
  4. //jQuery对象 
  5. jotrs = $(otrs); 

经常会碰到jQuery与原生的JS混写的时候,也不知道这样的效率如何,转换成jQuery对象的时候,会带来多大的性能损耗。

另外jQuery对象转换成DOM对象稍微要复杂一点,由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。

  1. $("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5] 

这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:

  1. $("#msg").html(); 
  2. $("#msg")[0].innerHTML; 
  3. $("#msg").eq(0)[0].innerHTML; 
  4. $("#msg").get(0).innerHTML; 

博客留言短信提醒更新

这几天突然发现手机不吵了,看博客留言也没有增加,如是点进文章里面看看,发现了留言,而右侧的Sidebar居然不显示,估计是数据库有值,而没有更新缓存。

最初发现短信留言出错是在Samool的博客上看到的,因为他使用的代码和我相同,但是解析出SSIC错误,估计是飞信更改了最新的协议了。以前的代码不管用了,回头好好研究下飞信的协议。不过为了解眼前之急,还是在网上找到了解决方案。这次代码更简单了,不需要引入任何PHP文件,有热心的童鞋给我们提供了服务中转信息,不过我们的手机号和密码有没有记录在他的数据中,就无从知晓了。安全性还是不能保证。下次还是自己写一个吧。

Sablog-X 2.0 具体方法:

上传class_curl.rar到根目录,然后打开根目录下post.php 找到

  1. $cmid = $DB->insert_id(); 

在下面添加

  1. //add msg notice 
  2.     if($username!='后台登陆名') { 
  3.          require_once('class_curl.php'); 
  4.          $data["username"] = 你的手机号;   
  5.          $data["password"] = "手机密码";   
  6.          $data["sendto"] = 你的手机号;   
  7.          $data["message"] = $username."说:".$content;   
  8.    
  9.          $curl = new Curl_Class();   
  10.          @$curl->post("http://sms.api.bz/fetion.php"$data);  
  11.          
  12.     } 
  13.     //END msg notice 

测试一下OK了,中间的工作已经都交给了sms.api.bz 完成了。

如果你测试出现如下结果:

Warning: Cannot modify header information - headers already sent by

那么请看下面这段话

编码问题,utf-8有两种模式,utf-8 with bom 和utf-8 with no bom ,utf-8 with bom 会在头部输出隐藏的信息,我们知道header()跟session_start()函数前是不能有任何输出的,所以就会产生这个问题,用编辑器(不要用记事本)打开这个文件,另存为utf-8 with not bom这种模式就行了。

12.jpg

大小: 44.1 K
尺寸: 500 x 224
浏览: 502 次
点击打开新窗口浏览全图

在此感谢金山的张宴组长提供无私飞信中转服务.更多详细关于飞信短信提醒请移步 中国移动飞信免费发短信API接口(第三方 Fetion API)

JS多语言设计方案

公司目前碰到一个项目,客户是美国CDC,因为考虑到中方与美方的合作机构,所以需要设计出多版本语言切换。要求前台实现。因为语言包不需要经常修改没必要入库操作,所以将语言包写在一个配置文件里面是最好的(自我感觉)。

先看DEMOJS多语言设计方案(带记忆效果)

于是第一次尝试,我写了一个语言包(js文件):

  1. message.en={ 
  2.         "1""Application Form for Project Activity"
  3.         "2""Project Name:"
  4.         "3""National Level:"
  5.         "4""Provincial Level:"
  6.         "5""Implementing Unit (NCAIDS division, provincial unit, or other):"
  7.         "6""Project ID #:" 
  8.        } 
  9.  
  10. message.chs={ 
  11.         "1""项目活动申请表"
  12.         "2""项目名称:"
  13.         "3""国家级单位:"
  14.         "4""省级单位:"
  15.         "5""项目执行单位(注明性艾中心科室,省级单位,或其他):"
  16.         "6""项目活动序号:" 
  17.      }