それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

そろそろjQuery卒業するためにeach/SelectorをDOMで使う事から始める

このあいだHTMLのソースを見たらバージョン違いのjQueryが3つも入ってて閉口したtakuyaです。今日は。

jQueryを考える時かもしれない。

jquery便利なんだし、クロスブラウザもできるので楽ちんだけど。
jQueryプラグインが何個もscript 指定されてるのを見てもう嫌だと思った。

そのjqueryは「ほんとう」に必要ですか

htmlの書き換えとかならjQuery使わないでもダイジョブだよ
配列にeachするくらいならforEach使えば大丈夫

jQuery#map jQeuery#eachの代替forEach

jQueryにはmap/eachでArray#map がなくても安心できた。

jQuery.map([1,2,3,4,5], function(e){ return 2*e-1}) #=> [1,3,5,7,9]

そもそも jQuery#map が知られてないので辛い所ある。

もちろん、これらはArray.forEach, Array.map で代替できる

> [1,2,3,4,5].map( function(e){ return 2*e-1}) #=>[ 1, 3, 5, 7, 9 ]

いまどき for 使ってるプログラマはどうぞ消えて、、、
せめて無理ならまずはjQuery.each だけでも・・・
for each/ for .. in / for .. of / for comprehension に切り替えてくれたら

querySelector/querySelectorAllの採用

element = document.querySelector( selectors );

querySelectorAllはNodeListを返す

querySelectorAllの戻り値はnullは NodeListになる。

NodelistはNodelistなのでArrayと同じようにIndexアクセスきるが、forEachはない。

ret = document.querySelectorAll("a");
ret[0]
ret.forEach #=> undefined

対策1 NodeListをArrayに変換する

a = Array.apply(null, ret)

対策2 foreachをコピーする

ret.forEach = Array.prototype.forEach
ret.forEach(function(entry, index) { console.log(entry) } )

ノードの追加

Node.appendChildを使う。

https://developer.mozilla.org/en-US/docs/Web/API/Node.appendChild

HTML属性

attr()の代替

Node.attributes
a.href
a["href"]
a.classlist

など。

でもやっぱりjQueryは手放せない・・・

Deffered便利なんだから最終的にはjqueryに帰ってくる。でも不要なjqueryのインクルードは避けたいところ。