prototype.js の $ 関数で
あっちこっちで、$、$、ってやるとその都度ノード探索発生してうざいので
↓prototype.js 1.5 の $ 関数
function $() {
var results = [], element;
for (var i = 0; i < arguments.length; i++) {
element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
results.push(Element.extend(element));
}
return results.length < 2 ? results[0] : results;
}
キャッシュしてみますた。
でも、IDがダイナミックに変更される場合(あんまないでしょ)はダメ
↓要素のキャッシュ化
$.cache = {};
function $() {
var results = [], element;
for (var i = 0; i < arguments.length; i++) {
element = arguments[i];
if (typeof element == 'string') {
var cache = arguments.callee.cache;
element = cache[element] || (cache[element] = document.getElementById(element));
}
results.push(Element.extend(element));
}
return results.length < 2 ? results[0] : results;
}
さらに、
細かな高速化、二箇所
$.cache = {};
function $() {
var results = [], element;
for (var i = 0, len = arguments.length; i < len; i++) {
element = arguments[i];
if (typeof element == 'string') {
var cache = arguments.callee.cache;
element = cache[element] || (cache[element] = document.getElementById(element));
}
results[i] = Element.extend(element);
}
return results.length < 2 ? results[0] : results;
}引数に id を指定すると内部的に $ が呼ばれているので、そういう場合はけっこう早くなるかも
では、そろそろ Shibuya.JS に向かいます。