我的烏拉拉練功坊

請來參觀移植到 Google Firebase 的成績 https://oolala.xyz/ken73chen/

2018年4月25日

新工作感想: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 還是照例傳回一個物件,也不會出現錯誤訊息: