2

getElementsByClassName具体的には、IE を除くすべてのブラウザーで使用できる機能をオーバーライドしたいと考えています。IE はquerySelectorAll代わりに a を使用します。

Element.prototype.getElementsByClassName = function(className) {
    if(document.getElementsByClassName) {
        return this.getElementsByClassName(className);
    } else if(document.querySelectorAll) {
        return this.querySelectorAll(className);
    }
};

ただし、Firefox でコードを実行すると、代わりにネイティブ関数が使用されます。getElementsByClassName が利用できない場合、これはクロス ブラウザー ソリューションとして引き続き機能し、代わりに私のプロトタイプを使用しますか、またはネイティブ関数をオーバーライドしてコードが毎回使用されるようにする方法はありますか? プロトタイプに似たような名前を付けることができますが、読みやすくするために、同じ名前を付けることをお勧めします。

4

1 に答える 1

1

この質問に対する真に受け入れられた回答として、Matt Ballの回答を追加したかっただけです。彼が言ったように、最初に設定した方法ではなく、ポリフィルを使用するのが最善です。

if(!Element.prototype.getElementsByClassName) {
    Element.prototype.getElementsByClassName = function(className) {
        return this.querySelectorAll(className);
    }
}
于 2012-05-14T02:23:33.257 に答える