时光博客 - WEB开发中的可用性和用户体验
全部文章

JS innerHTML Double Quotes

通过jsinnerhtml来获取一个dom节点,内部的html值时,如果属性值没有空格,则ie左右版本下,都会出现标签大些,双引号丢失问题。如果属性值有空格,则标签会变成大写,引号则正常输出.看下面示例:

当属性值无空格时:
FF3.5.7(gecko/20091221)<div id="div2"></div>

IE6 弹出:<DIV id=div2></DIV>
IE7 弹出:<DIV id=div2></DIV>
IE8 弹出:<DIV id=div2></DIV>

有空格时:
FF3.5.7(gecko/20091221)<div id="div2 "></div>

IE6 弹出:<DIV id="div2 "></DIV>
IE7 弹出:<DIV id="div2 "></DIV>
IE8 弹出:<DIV id="div2 "></DIV>

产生这个BUG的原因是什么呢?

When you get the innerHTML of a DOM node in IE, if there are no spaces in an attribute value, IE will remove the quotes around it.IE's innerHTML doesn't remove quotes from non standard attributes.

即使是jQuery里面,jquery团队的技术人员也没有解决这个问题.

提供下解决方案:

  1. function ieInnerHTML(obj) { 
  2.      var zz = obj.innerHTML, 
  3.          z =  
  4.        zz.match(/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>/g); 
  5.       if (z){ 
  6.         for (var i=0;i<z.length;i++){ 
  7.           var y, zSaved = z[i]; 
  8.           z[i] = z[i].replace(/(<?\w+)|(<\/?\w+)\s/, 
  9.                               function(a){return a.toLowerCase();}); 
  10.           y = z[i].match(/\=\w+[?\s+|?>]/g); 
  11.            if (y){ 
  12.             for (var j=0;j<y.length;j++){ 
  13.               z[i] = z[i].replace(y[j],y[j] 
  14.                          .replace(/\=(\w+)([?\s+|?>])/g,'="$1"$2')); 
  15.             } 
  16.            } 
  17.            zz = zz.replace(zSaved,z[i]); 
  18.          } 
  19.        } 
  20.       return zz; 
  21.      } 

在相应的地方调用函数ieInnerHTML

  1. if(/*@cc_on!@*/0){ 
  2.     inner_str = ieInnerHTML(obj); 
  3. }else
  4.     inner_str = obj.innerHTML; 

 原理:对IE版本进行对应的JS处理,而且相应的元素标签中不要出现非标准元素

参考资料:

  1. innerHTML removes attribute quotes in Internet Explorer
  2. innerHTML中的双引号哪去了?

 

笔记本无线网卡共享上网

本文来自傻猫网络日志

无线网卡对联,也就是所谓的 HOC 方式。我的笔记本无线网卡是Intel(R) PRO/wireless 3945ABG,操作系统是Windows XP sp2,VISTA的或者WINDOWS 7在后面有写到。(不是所有的无线网卡都支持,不过大部分都支持。),今天晚上成功将M8用wifi与笔记本电脑连接成功,M8可以通过笔记本共享上网,也可以用飞鸽传送文件,非常方面,推荐中。(此方法由魅族论坛网友samogogo提供)
---------------------------------------------------
XP:
1、“网上邻居”右键“属性”,“无线网络连接”右键“属性”,选择“常规”旁边的“无线网络配置选项卡”,点右下角的“高级”,将“仅计算机到计算机”选上,还有将“自动连接到非首选网络”前面打勾。完成后点“关闭

2、回到”无线网络配置“,点中首选网络下面的添加按钮,自行输入网络名,本例中为“Test”,将“自动为我提供密钥”的对号去掉,将数据加密选项改成“已禁用”,确定返回。

3.共享本地连接:“本地连接”右键“属性”,选择“高级”选项卡,将“Internet连接共享” 下面的两个“允许”前面打勾,网卡将自动配置无线网卡IP为192.168.0.1,子网掩码为255.255.255.0。双击你的无线网络,会发现多了一个“Test”的无线网络出来,点击连接,然后打开你的M8搜索网络,如果能搜索到samogogo的无线网络,则恭喜你,配置无线网络成功。(如果你是宽带拨号,只需要在你的宽带拨号的属性里“高级”选项卡共享下网络也一样。)
------------------------------------------------------------
VISTA和WINDOWS 7的用户:
1.点击左下角的球球,“网络”上右键“属性”,进入“网络和共享中心”,VISTA点右边的“查看状态”按钮,WINDOWS 7点左边的“无线网络管理”按钮。
2.进入“无线网络管理”窗口,点左边的“添加”,OK,按向导的方法来配置吧。
“创建临时网络”--“下一步”--填写上你要的无线网络名,选择无身份验证,开放式,保存这个网络,下一步-------“关闭”,OK了。
3.第三步是共享本地连接网络,和XP类似。

ImageSwitch For jQuery

最近在寻找图片切换效果,在网上找到了个不错的jquery版的图片切换效果,支持多种样式,纯js实现,视觉上绝对不逊色于FLASH。废话不多说看下效果图

兼容性:完美兼容Firefox 3.5.5 for win ,IE6,IE7,IE8,其他浏览器未测试

独立预览地址:http://liupeng.us/demo/jQuery/ImageSwitch/

示例代码:ImageSwitch_jQuery.rar

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
浏览: 107 次
点击打开新窗口浏览全图

在此感谢金山的张宴组长提供无私飞信中转服务.更多详细关于飞信短信提醒请移步 中国移动飞信免费发短信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.      } 

 

时光博客的Picasa相册

google如此好的产品竟然也被水产了,我TC无比神奇。为了保障大家无障碍阅览时光博客的Cosplay图集,现在手把手教大家穿墙术。引用keso的一句话

keso是谁?
作为一个有点上进心的中国网民,穿墙术是你必须掌握的生存技能之一。

如果你是WIN用户,开始 - 运行 - 输入“C:\windows\system32\drivers\etc

用记事本或者文本编辑软件打开 hosts 文件,在最下面加入(直接CTRL+C 即可)

203.208.39.104 picadaweb.google.com
203.208.39.104 lh1.ggpht.com
203.208.39.104 lh2.ggpht.com
203.208.39.104 lh3.ggpht.com
203.208.39.104 lh4.ggpht.com
203.208.39.104 lh5.ggpht.com
203.208.39.104 lh6.ggpht.com
203.208.39.104 lh7.ggpht.com
203.208.39.104 lh8.ggpht.com

这时你再打开时光博客 - Picasa 相册会发现

图片附件(缩略图):
picasa of liupeng.jpg

大小: 222.84 K
尺寸: 500 x 398
浏览: 86 次
点击打开新窗口浏览全图