Actually,simplicity is not simple
2011-06-15Develop
none
没有评论

IE & FF 中的几处JS差异

尽管那需要用长串的、沉闷的不同分支代码来应付不同浏览器的日子已经过去,有的时候还是有必要做一些简单的区分和目标检测来确保某块代码能在用户的机器上正常运行。

这篇文章就是作者来介绍7个在IE和Firefox中不同的JavaScript句法。

  1. CSS “float” 值

访问一个给定CSS 值的最基本句法是:object.style.property,使用驼峰写法来替换有连接符的值,例如,访问某个ID为”header”的

<

div>的background-color值,我们使用如下句法:

document.getElementById("header").style.backgroundColor= "#ccc";

但由于”float”这个词是一个JavaScript保留字,因此我们不能用 object.style.float来访问,这里,我们可以在两种浏览器中这么做:

IE的语法:

document.getElementById("header").style.styleFloat = "left";

Firefox的语法:

document.getElementById("header").style.cssFloat = "left";
  1. 元素的推算样式

JavaScript可以使用object.style.property句法,方便地在外部访问和修改某个CSS样式,但其限制是这些句法只能取出已设的行内样式或者直接由JavaScript设定的样式。并不能访问某个外部的样式表。为了访问元素的”推算”样式,我们可以使用下面的代码:

IE的语法:

var myObject = document.getElementById("header"); 
var myStyle = myObject.currentStyle.backgroundColor;

Firefox的语法:

var myObject = document.getElementById("header");
var myComputedStyle = document.defaultView.getComputedStyle(myObject, null); 
var myStyle = myComputedStyle.backgroundColor;
  1. 访问元素的”class”

像”float”一样,”class”是JavaScript的一个保留字,在这两个浏览器中我们使用如下句法来访问”class”。

IE的语法:

var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("className");

Firefox的语法:

var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("class");

This syntax would also apply using the setAttribute method.

See a demo page that demonstrates these two different syntaxes

  1. 访问

就第3点中所提到的,我们同样需要使用不现的句法区分来访问

IE的语法:

var myObject = document.getElementById("myLabel"); 
var myAttribute = myObject.getAttribute("htmlFor");

Firefox的语法:

var = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("for");
  1. 获取鼠标指针的位置

计算出鼠标指针的位置对你来说可能是非常少见的,不过当你需要的时候,在IE和Firefox中的句法是不同的。这里所写出的代码将是最最基本的, 也可能是某个复杂事件处理中的某一个部分。但他们可以解释其中的异同点。同时,必须指出的是结果相对于Firefox,IE会有更在的不同,这种方法本身 就是有BUG的。通常,这种不同可以用”拖动位置”来得到补偿,但,那是另外一个主题的文章了: ) !

IE的语法:

var myCursorPosition = [0, 0];
myCursorPosition[0] = event.clientX;
myCursorPosition[1] = event.clientY;

Firefox的语法:

var myCursorPosition = [0, 0]; 
myCursorPosition[0] = event.pageX;
myCursorPosition[1] = event.pageY;
  1. 获取可见区域、窗口的大小

有时,我们会需要找到浏览器的可视位置的大小,通常我们称之为”可见区域”。

IE的语法:

var myBrowserSize = [0, 0]; 
myBrowserSize[0] = document.documentElement.clientWidth; 
myBrowserSize[1] = document.documentElement.clientHeight;

Firefox的语法:

var myBrowserSize = [0, 0];
myBrowserSize[0] = window.innerWidth;
myBrowserSize[1] = window.innerHeight;
  1. Alpha 透明

好吧,这并不是一个JavaScript句法问题,而是源自于CSS的Alpha透明。但当某个物体需要淡入/出则需要JavaScript来表 现,这是通过访问CSS的Alpha透明设置来完成的,通常在一个循环中完成。你需要通过来修改的JavaScript的代码如下::

IE的语法:

#myElement { filter: alpha(opacity=50); }

Firefox的语法:

#myElement { opacity: 0.5; }

IE的语法:

var myObject = document.getElementById("myElement");
myObject.style.filter = "alpha(opacity=80)";

Firefox的语法:

var myObject = document.getElementById("myElement");
myObject.style.opacity =   "0.5";

小九出生实录

04:29 老婆发短信:见淡红了 开始肚子痛了 现在的痛法有点像大姨妈来了。不过当然我正在和周公下棋未看到此消息。嘻嘻~~

07:00 接到老妈电话:小九不安分要出来看外面的世界,现老婆已经在医院了让我放心(感谢老妈)。睡意全部消散,起床梳洗前往火车票预售点买了两张最近的动车票(下午两点11开的D93)。

09:00 来到公司交代些工作上的事,以及办理产假手续。

10:50 回到家,吃了点东西,带上我早已收拾好的“装备”和爸一起去火车站。

11:15 接到姐打来的电话,老婆很难受建议我让老婆破腹产,无条件同意!

13:20 来到候车厅焦急的等待检票上车。

13:50 车站开始检票。

14:05 打电话给爸问老婆情况:老婆在产房很难受!让爸同意破腹产。

14:40 接到姐电话:小九出生,顺产,男婴,七斤重,母子平安。

14:44 狂喜过后开始给老婆家的亲戚打电话报喜。

17:50 火车到站,爸要求先去家吃完饭再去医院看他女儿,原因:我饿了!:-O -_-!

19:20 吃完饭打车前往医院看到我可爱的老婆和儿子,但姐不让我抱儿子,原因:怕我不会抱! -_-!

接下来四天四夜在医院陪伴着我的老婆和儿子,很累,眼睛刺痛,腰很疼,到现在都还疼,但真的很幸福。


小九像小老头,刚看到时像个小老头子,很多皱眉,还有鱼尾纹!呵呵。但二天后就饱满很多了,前天收到老婆短信:发现你儿子蛮眉清目秀的 比你好看多了 :-D

小九很可爱,第一次看到他时就挣着大大的有点向外凸的眼睛到处看;樱桃小唇很动人像他妈;鼻子宽宽大大的像我,嘿嘿!

小九骨骼很大,出生时医生就说小家伙的骨骼大;我在抚摸小家伙时也发现他手指挺长的,脚不光长还很有力,时不时小家伙就用力蹬几下;

小九很乖,除饿了和拉了大小便之外基本很安静,醒来时就挣着大大的眼睛到处看,一边玩着口水一边做着鬼脸,加上大大的眼睛,超可爱!

小九很勇敢,身边没人醒来后只会自个儿玩着而不会哭闹;双手一直是打开着,而不像有些宝宝紧握着拳头。

小九不挑食,刚出生的两天里只喝了白开水以及一种去火的茶(名字忘了,杯具!),第三天开始喝奶粉,同时有意让他吸母乳;我很开心小家伙不挑食,希望之后几个月中也一样这样,别出现一些妈妈所说的挑食情况!

小九性子急?饿了和拉了大小便后会不停的哭,没有任何的停歇!是性子急的表现吗?希望不是!

alt text

VIM常用插件记录

又是很久没更新blog了,一直挺忙的,我的小九也快在今年的3月底出生了,呵呵。

今天居然没什么活,来整理了下我的GVIM目录,也记录下:

plugin:

  • bookmarking:一款VIM的可见书签。进行了修改 修改后的文件在这儿

    " plugin - bookmarking.vim 设置标记(标签)
    " <F9> 设置标记    <F4> 向下跳转标记   <S-F4> 向上跳转标记
    
  • bufexplorer: 这个插件可以帮助你轻松的在缓冲间调转。

    " plugin - bufexplorer.vim Buffers切换
    " \be 全屏方式查看全部打开的文件列表
    " \bv 左右方式查看   \bs 上下方式查看
    
  • vimExplorer:文件管理器,可以当资源管理器用。

    " plugin - vimExplorer 文件管理器
    " :VE 打开文件管理器       tab: 在树、列表窗口切换  
    " Enter: 树窗口开关目录    u: 列表中在预览窗口打开文件
    " ;r 打开renamer插件
    
  • renamer:强大的批量重命名工具

    " plugin - renamer 文件重命名
    " :Renamer 将当前文件所在文件夹下的内容显示在一个新窗口
    " :Ren 开始重命名
    
  • matchit:使%不仅能够匹配简单的<>(),还能匹配之类标签的功能

    " plugin - matchit.vim   对%命令进行扩展使得能在嵌套标签和语句之间跳转
    " % 正向匹配      g% 反向匹配
    " [% 定位块首     ]% 定位块尾
    
  • mark:给不同的单词高亮,表明不同的变量时很有用。

    nmap <silent> ,hl <Plug>MarkSet
    vmap <silent> ,hl <Plug>MarkSet
    nmap <silent> ,hh <Plug>MarkClear
    vmap <silent> ,hh <Plug>MarkClear
    nmap <silent> ,hr <Plug>MarkRegex
    vmap <silent> ,hr <Plug>MarkRegex
    

    这样,当我输入 ,hl 时,就会把光标下的单词高亮,在此单词上按 ,hh 会清除该单词的高亮。如果在高亮单词外输入 ,hh ,会清除所有的高亮。

    你也可以使用virsual模式选中一段文本,然后按 ,hl ,会高亮你所选中的文本;或者你可以用 ,hr 来输入一个正则表达式,这会高亮所有符合这个正则表达式的文本。

    你可以在高亮文本上使用 ,#,* 来上下搜索高亮文本。在使用了 ,#,* 后,就可以直接输入 #* 来继续查找该高亮文本,直到你又用 #* 查找了其它文本。

    " <leader>*  当前MarkWord的下一个     <leader>#  当前MarkWord的上一个
    " <leader>/  所有MarkWords的下一个    <leader>?  所有MarkWords的上一个
    
  • WinMove:窗口移动插件(用得不多,挺好玩的,尤其是全屏后)

    let g:wm_move_left  = "<A-h>"
    let g:wm_move_right = "<A-l>"
    let g:wm_move_up    = "<A-k>"
    let g:wm_move_down  = "<A-j>"
    
  • ZenCoding:很酷的插件,HTML代码生成,以前专门写过一篇日志写这插件,相当不错。这里有个它的操作“视屏”,对着帮助文档再配合着·<C-]>·很方便浏览很容易上手。

  • auto_mkdir: 自动创建目录插件,功能简单但很实用,能解决下面的情况下报错的问题

    :w /home/asins/vim_plugin.txt 
    will fail with with E212 ("Can't open file for writing.") 
    
  • mru:记录最近打开的文件,相当好的插件。

    let MRU_File = $VIMFILES.'/_vim_mru_files'
    let MRU_Max_Entries = 1000
    let MRU_Add_Menu = 0
    nmap <leader>f :MRU<CR>
    

    这里用的$VIMFILES变量是我自己定义的,

    if has('unix')
        let $VIMFILES = $HOME.'/.vim'
    else
        let $VIMFILES = $VIM.'/vimfiles'
    endif
    
  • surround:快速替换、清除包围符号、标签。详细的介绍帮助文档,给出些例子:

    "  Old text                  Command     New text ~
    "  "Hello *world!"           ds"         Hello world!
    "  [123+4*56]/2              cs])        (123+456)/2
    "  "Look ma, I'm *HTML!"     cs"<q>      <q>Look ma, I'm HTML!</q>
    "  if *x>3 {                 ysW(        if ( x>3 ) {
    "  my $str = *whee!;         vlllls'     my $str = 'whee!';
    "  "Hello *world!"           ds"         Hello world!
    "  (123+4*56)/2              ds)         123+456/2
    "  <div>Yo!*</div>           dst         Yo!
    "  Hello w*orld!             ysiw)       Hello (world)!
    
  • NERD_commenter:注释代码用的

    " <leader>ca 在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
    " <leader>cc 注释当前行
    " <leader>cs 以”性感”的方式注释
    " <leader>cA 在当前行尾添加注释符,并进入Insert模式
    " <leader>cu 取消注释
    " <leader>cm 添加块注释
    
  • jsbeautify:优化js代码,并不是简单的缩进,而是整个优化

    " 开始优化整个文件
    nmap <silent> <leader>js :call g:Jsbeautify()<cr>
    
  • yankring:寄存器可视操作

    map <leader>y :YRShow<cr>
    "map <leader>yc :YRClear<CR>
    

syntax:

after:

  • css:CSS颜色预览

    注意这插件得放在.vim/after/syntax目录

CSS命名的那点事

又是很久没写过东东了,今天在看张鑫旭blog中的《精简高效的CSS命名准则/方法》时,产生了不小的共鸣。

CSS的命名我使用过很多种方式:

  • 用功能名的拼音。感觉很二,也很长,写多了很快就不明白是什么了,因为我拼音也用得不多,打字一直用五笔,写多了就无法很快了解当前样式的意思。
  • 用功能名的对应英文词组组合。到是不会让自己感觉很二,但我自己的英文菜得无法言语,所以在写CSS时常常开着google的翻译网页,呵呵,不怕各位笑话。
  • 基于CSS属性命名些常用的样式。这是在我写CSS一段时间后慢慢形成的习惯,因为记忆方便,不用写个样式就去想下应该命名成什么。如果有独特需求也只需联合父层就可以进行独特需求的设置了。在我看来这种写法是将CSS属性进行最小单元封装的过程,但这样做也不是没有问题,后面会说到。

但我却从来没有总结过,惭愧啊~~

现在我接到项目一开始很是喜欢在头上写些样式,都成了我写页子的习惯了:

.cRed{color:#F00;}
.tC{text-align:center;}
.b{font-weight:700;}
.....

在写功能模块时给它一个ID,之后的样式就像

#mod .b{...}
#mod .tC{}

这样CSS不会有很多层,样式名也很短,我也不用在每次加入CSS时为想个样式名而花时间了。

这样的命名用起来很舒服,但也不是一点问题没有,如后期的维护上,需求改变时……,对面大量HTML源文件或被JS、PHP等语言引入到代码中的结构,修改它们是个痛苦的过程。

想当初CSS被疯狂提倡时的理由之一就是无需对HTML进行大规模的修改只需改个CSS的性能就能完成所要的。但这种方法进行的却是对CSS属性进行最小单元的封装,样式名称与属性名有着直接的联系,如果要进行修改,改CSS的性能就有点不妥了,让样只能让CSS看起来更加混乱。

所以使用这种方法需要有个平衡点,在定义模块结构时我不会使用这种方式,对于模块的建立我喜欢这样写:

<div id="modName" class="XXX">
    <div class="head">
        <div class="tit">
            <h3>模块名</h3>
        </div>
    </div>
    <div class="con"></div>
    <div class="floot"></div>
</div>

这里面的样式 head tit con floot在最外层都不会定义,起始定义点是#modName .head这样的,当然根据需求结构会有些不同,但基本是这样的。

所以我现写的CSS层级一般是两层,最多也就是四层。

2010-08-05Tool
VIM
8 评论

一组能让我爽出内伤的 Vim motion

今天有人在群里说VIM的motionn特性,后去搜索了下,顿时让我爽得想哭啊,这就不是我一直所寻找的嘛!

对于天天写HTML的我来说命令vitvatvi"真的太有用了,尤其vi"编辑属性就别太爽,以前一直是移动到属性区域按i后再疯狂按删除键。

用vim这么长时间,现看到下边几句,对vim的认识提高一个台阶。呵呵~~

以下是选择区域内的内容:

ci[ 删除一对 [] 中的所有字符并进入插入模式
ci( 删除一对 () 中的所有字符并进入插入模式
ci< 删除一对 <> 中的所有字符并进入插入模式
ci{ 删除一对 {} 中的所有字符并进入插入模式
cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式
ci” ci’ ci` 删除一对引号字符 (” 或 ‘ 或 `) 中所有字符并进入插入模式

注:如果想一起删除区域边界可把ciX中的i换成a;如果只是想选择这些区域可将ciX中的c改为v