2011-07-28 20 views
0

私は古いウェブサイトに問題があります。その上のすべてのJavaScriptコードはgetElemenById関数を使用します。しかし、サイトマークアップのタグはidプロパティを持たず、代わりに名前プロパティのみを持ちます。それはIEでも動作しますが、ブラウザは名前プロパティでも要素を返します。他のすべてのブラウザでは、JSの間違いです。 この機能を他のブラウザでオーバーロードして、他のブラウザと互換性のあるWebサイトにする方法はありますか?JavaScript getElementById関数のオーバーロード

+3

他のブラウザで異なる方法で動作しようとするのではなく、正しく動作するようにコードを修正するほうがよいでしょう。 'getElementsByName'メソッドを使って名前で要素を見つけることができますが、名前がIDのようにユニークであるとは予想されないので配列を返します。 –

答えて

11

Javaの関数を「オーバーロード」する方法はありません。つまり、JavaやCのような強く型付けされた言語で行うことです。実際、JavaScriptのすべての関数は、この意味ですでにオーバーロードされています任意の数と種類の引数を持つ関数を呼び出すことができます。

しかし、できることは、既存のバージョンの前に独自のプロキシを挿入し、好きな動作でプロキシを実装することです。たとえば、

+1

ニースのソリューション! +1 –

+0

ありがとうございます。それは私にとって最高です。 –

1

getElementByIdを正常に上書きすることはできません。検索を行うと、それはこのような何かをして交換が容易に十分に聞こえる:

// Replace 
document.getElementById("foo"); 
// With 
myGetElementById("foo", document); 

// Replace 
myElement.getElementById("foo"); 
// With 
myGetElementById("foo", myElement); 

その後することができますmyGetElementByIdあなたが望むように、古いIEの中で何が起こるかと何をgetElementByIdをオーバーライドしていない場合は気にせず。

1

getElementsByNameを試してください。これは、名前の要素のコレクションを取得するために使用されます

+0

ありがとうございます。私はそれを知っていますが、この古いウェブサイトは多くの仕事に費やされています。私は回避策がありません。 –

関連する問題