和訳:A链接标记ie下会自动补全href。
Ajax Link Tracker と MapSurface で作業しているときに、DOM スクリプトを使用して href 属性を取得する方法に一貫性がないことに気づきました。
href 属性は、値セットがページ URL のコンテキストに相対することができるという点で他の要素属性とは異なります。相対href属性でリンクを設定した場合
テストページ
ブラウザはページの現在の URL を調べ、リンクの絶対 URL を導き出します。
http://www.glenn.jones.net/development/test1.html
これが問題の根本であり、一部のブラウザは属性のテキストを返し、他のブラウザは派生した絶対 URL を返します。結果は、href 属性の取得に使用した方法によっても異なります。属性にアクセスするには、次の 3 つの一般的な方法があります。
linkobj.href;
linkobj['href'];
linkobj.getAttribute('href');
属性にアクセスする
linkobj.href
メソッドと
linkobj[‘href’];
メソッドは、一貫して派生した絶対 URL を返します。
Microsoft は、
問題 getAttribute メソッドに 2 番目のパラメーターを追加することで、この問題に対処しようとしました。 2 番目のパラメータは 0、1、または 2 に設定できます。パラメータが 2 に設定されている場合、メソッドは属性テキストを返します。他の設定では、派生した絶対 URL が返されます。
linkobj.getAttribute('href');
linkobj.getAttribute('href',2);
|
|
派生 絶対 URL |
属性テキスト |
IE
リンクobj.href;
×
IE
linkobj.getAttribute('href');
×
IE
linkobj.getAttribute('href',2);
×
ヤモリ
リンクobj.href;
×
ヤモリ
linkobj.getAttribute('href');
×
ヤモリ
linkobj.getAttribute('href',2);
×
オペラ
リンクobj.href;
×
オペラ
linkobj.getAttribute('href');
×
オペラ
linkobj.getAttribute('href',2);
×
属性テスト ページの取得 IE6、Firefox 1.5、Opera 8.51 でテストします。
では、getAttribute メソッドは何を返すべきでしょうか?
getAttribute メソッドの構造を規定する W3C DOM レベル 2 コア仕様では、この問題はカバーされていません。どちらのアプローチが間違っているとか正しいというわけではありません。この点に関して、仕様には解釈の余地があります。
プログラマーとして、両方の値にアクセスできるようにしたいと考えています。この問題に対処するには、DOM コア仕様を更新する必要があります。
以下のコメントでジムと非常に良いやりとりをした後、私は正した立場にあります。仕様では、getAttribute は絶対 URL ではなく属性値を返す必要があると述べています。 Microsoft のアプローチは間違っています。
当面は、古い学校のオブジェクト プロパティ メソッド
linkobj.href
を使用して、派生絶対 URL を返します。すべてのブラウザーで最も一貫した結果が得られます。
対象の URLgetAttribute の W3C REC DOM Level 2 Core 仕様getAttribute の Gecko ドキュメントgetAttribute の Microsoft ドキュメントいつものように、この投稿を終えようとしていたときに、同じテーマについて議論している QuickMode サイトでこのバグ レポートを見つけました。
getAttribute HREF は常に絶対です。html