新工作感想:jQuery

因為工作的關係,不能用我心愛的MooTools,只能用jQuery,所以被問起 MooTools 和 jQuery 最大的不同之處,我終於想到個很好的答案了。

以下是很典型的 jQuery:

$('a').on('click', function(e) { e && e.preventDefault(); $(this).addClass('loading'); });

底下是 MooTools 的語法:

document.getElements('a').addEvent('click',function(e){ e && e.stop(); this.addClass('loading'); });

重點在$(this).addClass('loading')this.addClass('loading')的差別,MooTools 使用 JavaScript原型繼承的特性,所以以下兩行是相同的:

document.getElementById('element').addClass('disabled'); document.id('element').addClass('disabled');

希望你還記得getElementById()是 JavaScript 原生的原型 document 的原生 method,第二行id()就是來自 MooTools。

但是還是得用 jQuery……不過用 jQuery,還是要有好習慣,例如雖然 jQuery 有.click(),但 JavaScript 也有.click(),瞧瞧以下三段,做的都是一樣的事情。

第一段是好久不見的 JavaScrip……

document.getElementById("myCheck").click(); document.getElementById("myCheck").addEventListener("click",clickHandler);

第二段是 MooTools,就像是話比較少的原生 JavaScript,用的是原生 .click():

document.id('myCheck').click(); document.id('myCheck').addEvent('click',clickHandler);

第三段是 jQuery:

$('#myCheck')[0].click(); $('#myCheck').click(clickHandler); $('#myCheck').on('click',clickHandler);

第一個 .click() 是原生的,第二個.click()是 jQuery 的,相同名稱的 method 做不同的事,在 jQuery 中並不稀奇,例如:

$('#myCheck').text(); $('#myCheck').text(''); $('#myCheck').text('text');

MooTools 自詡優雅,所以來看看優雅的寫法:

document.id('myCheck').get('text'); document.id('myCheck').set('text',''); document.id('myCheck').set('text','text');

使用 jQuery,一不小心就會讓程式讀起來很糟糕,例如 $.get()、$.post()、$.getJSON(),當然比不上 $.ajax() 的一讀就懂,所以,將監聽事件交給.on()吧!

你以為你會的是 JavaScript,但其實你只是會 jQuery。

Ken

最後我要抱怨一下,如果不小心把 element 拼成 elememt,在 MooTools 就會因為選不到東西出錯:

新工作感想:jQuery

但是 jQuery 還是照例傳回一個物件,也不會出現錯誤訊息:

新工作感想:jQuery