Actually,simplicity is not simple

现实JS模板,可设置默认值

在写封装一些URL请求时想到用模板的方式会很灵活,所以在网上看了下,把replace的第二个参数写成函数时还真有意思,省了写循环的事,呵呵!也实现了我认为必需得有的特性:设置默认值

[javascript]
var urlList = {
    type: {
        a:'http://nootn.com/blog/?id={key}&name={name:asins}&notn={notn:js}',
        //这里还有很多这样的URL
    },
    url: function(T, O){
        var reg = new RegExp('\{([^}]+?)\}', 'g');
        var url = this.type[T].replace(reg, function(v,key){
            var arr = key.split(':');
            return encodeURIComponent( (O[arr[0]] != undefined ? O[arr[0]] : arr[1])||'' );
        });
        return url;
    }
    //这里还有其它函数
}

使用时就很方便了,

urlList.url('a', {key:'keyName', name:'nootn'});
//这样生成的URL就是http://nootn.com/blog/?id=keyName&name=nootn&notn=js

JS写的一个切换效果

帮人写的,呵呵!

里面有Ticker、以及lightbox效果,看Demo吧!

用jQuery写的,看着吧!在于如何实现,了解了这个用其它的也都一样了!HTML结构以及CSS可不是我写的,可能用于显现一个Demo有点不适合,看JS就是了,我也尽量让JS与HTML的结构分离了。

JS中函数调用的奇异写法

今天看不到一JS代码很是奇异,很久后才明白它的意思,佩服写这Coder,

$('#tip')[['show','hide'][$.getCookie('tip')]]();

这代码是基于jQuery的,要理解就得知道拆分,$('#tip')是jQuery的选择器,$.getCookie('tip')是使用jQuery的Cookie的插件,返回的是数值0、1,这些都不用多说。

主要看这部分[['show','hide'][1]](),如何拆呢?这也是让我想了一段时间的原因,如果作者这样写相信很多人一下就能明白。

$('#tip')['show']();

这不就是使用数组的方式调用函数嘛!再看中间[['show','hide'][1]],这下就明白了,只不是个数组吧了!

这代码的全意就是将一个jQuery的object的两个属性创建了一个数组,然后由$.getCookie('tip')的值进行选择,再应用jQuery的函数。拆分为一般的写法就像下面这样:

$.getCookie('tip') ? $('#tip').hide() : $('#tip').show();

有点绕,呵呵,但对于熟悉JS的调用很好处!

读Cross-Browser Inline-Block后的笔记

看到一篇很讲解inline-block的文章,相当不错,能在所有浏览器上使用,记录下。

比如有以下的HTML结构,想让其平行的显示:

<ul>
    <li>
        <img src="http://studynote.cn/blog/wp-content/themes/Asinsimple/images/logo.png" alt="简单其实不简单" />
        <h4>This is awesome</h4>
    </li>
    <li>
        <img src="http://studynote.cn/blog/wp-content/themes/Asinsimple/images/logo.png" alt="简单其实不简单" />
        <h4>This is awesome</h4>
    </li>
……
</ul>

一般说来,这种类型的布局是小菜一桩。固定宽度,固定高度,向左浮动就解决了,理想中的CSS代码如下:

li {
    width: 200px;
    min-height: 250px;
    border: 1px solid #000;
    display: inline-block;
    margin: 5px;
    vertical-align: top;
}

事实上上面的代码在 Firefox 3, Safari 3 和 opera 中的效果没有问题,就算

中的文字发生变化也能有很好的效果。但IE6、IE7、Firefox2 就没那么好了,全都乱七八糟的。 原文中介绍了如何解决这些问题,涉及到了很多CSS的知识点,其原文的HTML结构如下:

<ul>
    <li><div>
        <img src="http://studynote.cn/blog/wp-content/themes/Asinsimple/images/logo.png" alt="简单其实不简单" />
        <h4>This is awesome</h4>
    </div></li>
    <li><div>
        <img src="http://studynote.cn/blog/wp-content/themes/Asinsimple/images/logo.png" alt="简单其实不简单" />
        <h4>This is awesome</h4>
    </div></li>
……
</ul>

CSS如下:

li {
    width: 200px;
    min-height: 250px;
    border: 1px solid #000;
    display: -moz-inline-stack;
    display: inline-block;
    vertical-align: top;
    margin: 5px;
    zoom: 1;
    *display: inline;
    _height: 250px;
}

这段CSS解决了IE6、IE7、 Firefox2不支持inline-block的问题。做下笔记吧!自己的学习还是不到家啊!

  1. 使用display: -moz-inline-stack;属性解决 Firefox2 不支持inline-block的问题,但又带来了新的问题(所有FF对于所有的属性为stack(包括-moz-inline-stack)的元素,它的第一级子元素会继承该元素的宽度和高度,但是子元素的子元素不会再继承)。解决的办法是在DIV内加入个新的标签,但就我个人而言完全没有这个必要,99.9%的使用Firefox用户都是勤于更新版本的。
  2. 使用zoom:1;激发IE的 hasLayout 属性, 再加上*display:inline;之后,在 IE7 中它们就可以像 inline-block 一样显示了(其实我对这方面的了解也不多,还没有理解,所以写不出达多的文字)。还使用了display: inline;这一属性,display前面加个星号()的写法是用来区分于其它浏览器的,*display这种写法只有IE7以下的浏览器才能支持。
  3. 使用 _height: 250px; 解决IE6不支持min-height属性的问题,因为IE6 对 height 属性的不正确处理(即当内容的高度超过了容器设置的高度后,IE6会自动改变窗口的高度),使得我们可以这样使用。_height这种法写只有IE7以下的浏览器才能支持。

综上我认为比较好的写法是不考虑Firefox2的问题,

<ul>
    <li>
        <img src="http://studynote.cn/blog/wp-content/themes/Asinsimple/images/logo.png" alt="简单其实不简单" />
        <h4>This is awesome</h4>
    </li>
    <li>
        <img src="http://studynote.cn/blog/wp-content/themes/Asinsimple/images/logo.png" alt="简单其实不简单" />
        <h4>This is awesome</h4>
    </li>
……
</ul>

li {
    width: 200px;
    min-height: 250px;
    border: 1px solid #000;
    **display: inline-block;**
    vertical-align: top;
    margin: 5px;
    **zoom: 1;**
    ***display: inline;**
    _height: 250px;
}

原文地址:http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/

译文地址:http://www.qianduan.net/cross-browser-inline-block.html

有些涉及到的知识点可以阅读以下文章:

区分浏览器的 hack:http://www.ejeliot.com/blog/63

IE hasLayout:http://adamghost.com/2008/12/ie-haslayout-详解/

PS:从上面可以知道想让现有浏览器都支持display:inle-block;可以这样写:

span{display: inline-block;zoom:1;*display:inline;}

ArchLinux的包管理系统Pacman常用法

pacman -Sy abc #和源同步后安装名为abc的包
pacman -S abc #从本地数据库中得到abc的信息,下载安装abc包
pacman -Sf abc #强制安装包abc
pacman -Ss abc #搜索有关abc信息的包
pacman -Si abc #从数据库中搜索包abc的信息
pacman -Qi abc #列出已安装的包abc的详细信息
pacman -Syu #同步源,并更新系统
pacman -Sy #仅同步源
pacman -Su #更新系统
pacman -R abc #删除abc包
pacman -Rc abc #删除abc包和依赖abc的包
pacman -Rsc abc #删除abc包和abc依赖的包
pacman -Sc #清理/var/cache/pacman/pkg目录下的旧包
pacman -Scc #清除所有下载的包和数据库
pacman -U abc #安装下载的abs包,或新编译的abc包
pacman -Sd abc #忽略依赖性问题,安装包abc
pacman pacman -Su –ignore foo #升级时不升级包foo
pacman -Sg abc #查询abc这个包组包含的软件包

转自:http://vidot.blogbus.com/logs/32531650.html