因為工作的關係,不能用我心愛的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 還是照例傳回一個物件,也不會出現錯誤訊息: