Document.prototypeってIEだと書けないのか
getElementsByTagNameにワイルドカードが使えることを知った。
これで正規表現とか渡したりできたらいいなとか思って、
getElementsByTagNameRegExpとgetElementsByNameRegExpを
作ってみた。
function getElementsByNameRegExp(regExp){ var elms = document.getElementsByTagName('*'); var ary = []; for(var i = 0; i < elms.length; i++) if(elms[i].name && elms[i].name.match(regExp)) ary.push(elms[i]); return ary; } function getElementsByTagNameRegExp(regExp){ var elms = document.getElementsByTagName('*'); var ary = []; for(var i = 0; i < elms.length; i++) if(elms[i].tagName && elms[i].tagName.match(regExp)) ary.push(elms[i]); return ary; }
覚えたてのgetElemntsByTagNameをワイルドカードを使って全エレメントをとって
ループで回して、1つずつ正規表現でマッチングして、マッチしたら配列にいれとく
べたべたな実装。もっと効率のいい実装はないだろうか、、、
2つの関数の違いはnameでマッチングかけるかtagNameでマッチングかけるかの違いだけ。
で、これを、DocumentとElementオブジェクトに追加しようと思って
上の関数のdocument.getElementsByTagName('*');をthis.getElementsByTagName('*');
に変えて
Document.prototype.getElementsByNameRegExp = getElementsByNameRegExp; Element.prototype.getElementsByNameRegExp = getElementsByNameRegExp; Document.prototype.getElementsByTagNameRegExp = getElementsByTagNameRegExp; Element.prototype.getElementsByTagNameRegExp = getElementsByTagNameRegExp;
としたら。FirefoxだといけるんだけどIEだとDocumentとかElementがないよって怒られる。
う〜んIEはDocumentオブジェクトに直接渡せないのか。というかDocumentオブジェクトがないのか?
document.getElementsByNameRegExp = getElementsByNameRegExp; document.getElementsByTagNameRegExp = getElementsByTagNameRegExp;
とすれば使えるけどElementに追加する方法が思いつかない。
なんかいい方法ってないのかな〜