[JavaScript]模拟 jQuery 的 CSS 选择器 (Selector)

2017/03/21 更新:

可能是之前为了要相容旧版 IE (v9.0 之前) 的缘故,所以没发现到 JavaScript 还有 querySelector()querySelectorAll() 这两个函式,它们的功能分别为:

范例中可以得知,这两个函式遵循 CSS 语法,可以实现复杂的 CSS 选择器的层级、属性、分组、串联、伪元素...等判断,功能已不是 getElementById()getElementsByClassName()getElementsByTagName() 可以比拟!

当然复杂的 CSS 层级可改由 querySelector() 或 querySelectorAll() 来取得元素,不过若是目标明确,考量效率我还是用 getElementById() 来处理可能会比较好。

自订函式 $$() 改写如下:

function $$(element, isFirst){
    if(isFirst === 1){
        // 强制回传第一笔符合的元素
        return(document.querySelector(element));
    }
    else if(/^\#[\w\-]+/.test(element)){
        // 以 $$("#id") 回传元素
        return(document.getElementById(element.slice(1)));
    }
    else{
        // 回传元素阵列
        return(document.querySelectorAll(element));
    }
}

($$() 增加了第二个参数: isFirst,若设为 1 则强制回传第一笔符合 CSS 选择器的元素,而非元素阵列)

之前的内容:

自订函式

JQuery 强大、方便的选择器 (Selector) 是 jQuery 不可或缺的功能之一。不过如果我们不想加载 jQuery 而只想使用类似 jQuery 选择器的功能,那可以用自订函式的方式做到:

function $$(element){
    switch(element.charAt(0)){
    case("#"):
        // 以 $$("#id") 回传元素
        return(document.getElementById(element.slice(1)));
    case("."):
        // 以 $$(".class") 回传元素阵列,IE 要 v9.0 之后才支援
        return(document.getElementsByClassName(element.slice(1)));
    default:
        // 以 $$("tag") 回传元素阵列
        return(document.getElementsByTagName(element));
    }
}

或是单纯一点,仅传回指定 id 的元素就好:

function $$(element){
    return(document.getElementById(element));
}

我把这个自订的函式命名为 $$(),用以与 jQuery 的工厂函式 $() 做区隔。

但是要注意,以上自订函式回传的都是 DOM 元素,与 jQuery 在其它操作上并不相同。

换掉 jQuery 的工厂函式

如有需要也可以用 jQuery.noConflict() 换掉 jQuery 的工厂函式 $(),ex:

var jq = jQuery.noConflict();

这样就能改用 jq() 来做为 jQuery 操作,而原本的 $() 只要再次重新定义为自订函式即可使用,不会与 jQuery 冲突。

帮大家试过用 ¥ 做为自订函式的名称,不过都失败,大家可以不用试了!

参考网页

AtMail/AtMailOpen: 一套支援 IMAP 及 AJAX 的 Webmail 系统

因为我公司的 Mail Server 是使用 IMAP 协定,原本是安装 IlohaMail 做为用户的 Webmail,但 IlohaMail 对于 UTF-8 及中文邮件的支援并不算良好! 并且邮件一多的话,有时读取邮件清单会很久! 所以陆陆续续我都有在注意其它有支援 IMAP 的 Webmail。

最近发现一套由商业版改为 Opensource 的 Webmail: AtMailOpenAtMail 商业版的价格是 USD$250,但已经在去年推出了功能比较简单,并且是 Opensource 的 AtMailOpen。(AtMail 商业版与 Open 版的功能比较)

我先到 AtMailOpen 的官网去试用后的感觉很不错,画面简洁大方、并且运用了 AJAX,所以存取速度颇快。AtMailOpen 对于中文邮件、中文信件匣的支援也都很正常。

如果你接受 Webmail 仅支援 IMAP/IMAPS,并且没有中文操作接口,那你 应该要试试有 AJAX 加持的 AtMailOpen。

继续阅读

如何申请 live.com 电子信箱

Microsoft 的“@live.com”电子信箱开放注册了(应该是 2007 年底就开放注册的~我已经 Lag 很久了),不过是有地区性的,在台湾只能注册到“@livemail.tw”这种鸡肋的信箱 (中国则使用 @live.cn),下列的网址可以让你直接申请 @live.com 的信箱:

进入网页之后,点选画面中的“Or get a Windows Live e-mail address”即可。

如果还是没有跳出 live.com 的域名让你选,不要灰心,改用英文 Portable 版的 Firefox3 再试一次。

另外,稍早之前 Yahoo 也已经开放“@kimo.com”的信箱申请,@live.com 和 @kimo.com 都是很漂亮的域名,可惜功能没有 Gmail 强。

参考网页

  1. 如何申请 msn.com 电子信箱

VMware ESX/ESXi Server 功能初探及效能测试

经过前一篇 VMware Server 的效能测试之后,马上就来试用 VMware ESX/ESXi Server

VMware ESX/ESXi Server

VMware ESX Server 是属于“Bare-metal Hypervisor”,“Bare-metal Hypervisor”等级的服务器不需要预先安装任何作业系统,直接把 ESX Server 灌在这台服务器上,就可以活生生的把你服务器分割成数台 Virtual Machine,而且是最直接、最有效率的资源分配方式。

VMware ESXi Server 是 VMware ESX Server 的简易版,同样是半虚拟化技术,只要到 VMware 的网站申请序号即可免费使用。

我在安装 ESXi Server 时没有遇到什么因难,糊里糊涂就装好了 (硬盘的内容会被全部清掉),虽然主机板上的网络卡抓不到,但插上了一张 3COM 905C 就搞定了。

继续阅读