HTML Web ページにおける URL の表現

HTML Web ページにおける URL の表現
HTML では、一般的な URL はさまざまな方法で表現されます。
相対 URL:

コードをコピー
コードは次のとおりです。

例.php
デモ/example.php
./example.php
../../example.php
/example.php

絶対URL:

コードをコピー
コードは次のとおりです。

http://jb51.net/example.php
http://jb51.net:80/example.php
https://jb51.net/example.php

同時に、HTML には多数の要素属性値が存在します。一般的に、JavaScript を使用してこれらの URL 属性値を取得するには、次の 2 つの方法があります。

コードをコピー
コードは次のとおりです。

<a href="example.php" id="example-a">現時点では、ページの絶対 URL は http://jb51.net/ です</a>
<スクリプト>
var oA = document.getElementById('example-a');
oA.href == 'http://jb51.net/example.php';
oA.getAttribute('href') == 'example.php';
</スクリプト>

属性に直接アクセスして完全な絶対 URL を取得し、getAttribute メソッドを使用して元の属性値を取得することを期待します。実際、これは比較的理想的な結果です。すべての A レベル ブラウザーの中で、この結果を正常に取得できるのは Firefox と IE8 だけです。他のブラウザーでは、多かれ少なかれ特殊なケースがあります。要素属性が存在する特定の条件については、デモの例を参照してください。
ほとんどのブラウザで問題となるのは、どちらの方法も元の属性値を返すのに対し、実際のアプリケーションでは絶対 URL が必要になることが多いことです。「修飾されていない HREF 値の処理」の解決策は複雑すぎます。ここでは比較的簡単な解決策を示します。ブラウザの違いを考慮しなければ、コードは非常にシンプルになります。
<フォームアクション="example.php" id="example-form">
現時点では、ページの絶対 URL は http://jb51.net/ です</form>

コードをコピー
コードは次のとおりです。

<スクリプト>
var oForm = document.getElementById('example-form');
//IE6、IE7、Safari、Chrome、Opera
oForm.action == 'example.php';
oA.getAttribute('アクション') == 'example.php';
//絶対 URL を取得するための一般的なソリューション
getQualifyURL(oForm, 'アクション') == 'http://jb51.net/example.php';
getQualifyURL = 関数(oEl,sAttr){
var sUrl = oEl[sAttr],
oD、
bDo = 偽;
//IE8より前のバージョンですか?
//http://www.thespanner.co.uk/2009/01/29/detecting-browsers-javascript-hacks/
//http://msdn.microsoft.com/en-us/library/7kx09ct1%28VS.80%29.aspx
/*@cc_on
試す{
bDo = @_jscript_version < 5.8 ?true : @false;
}キャッチ(e){
bDo = 偽;
}
@*/
//Safari、Chrome、Operaの場合
if(/a/.__proto__=='//' || /source/.test((/a/.toString+''))
|| /^関数 \(/.test([].sort)){
bDo = 真;
}
if(bDo){
oD = document.createElement('div');
/*
//DOM操作の結果は変わりません
var oA = document.createElement('a');
oA.href = oEl[sAttr];
oD.appendChild(oA);
*/
oD.innerHTML = ['<a href="',sUrl,'"></a>'].join('');
sUrl = oD.firstChild.href;
}
sUrl を返します。
}
</スクリプト>

IE6 と IE7 という 2 つの古いブラウザには、さらに興味深い点があります。HTML 要素 A、AREA、IMG の両方の方法で取得される属性値はすべて絶対 URL です。幸いなことに、Microsoft は getAttribute にこの問題を解決する 2 番目のパラメータを提供しています。同時に、上記の両方の方法で IFEAM 要素と LINK 要素の元の属性が返されるという問題も解決できます。

コードをコピー
コードは次のとおりです。

<link href="../../example.css" id="example-link">
<a href="example.php" id="example-a">現時点では、ページの絶対 URL は http://jb51.net/ です</a>
<スクリプト>
var oA = document.getElementById('example-a'),
oLink = document.getElementById('example-a');
oA.href == 'http://jb51.net/example.php';
oA.getAttribute('href') == 'http://jb51.net/example.php';
oA.getAttribute('href',2) == 'example.php';
oLink.href == 'example.php';
oLink.getAttribute('href') == 'example.php';
oLink.getAttribute('href',4) == 'http://jb51.net/example.php';
</スクリプト>

<<:  行の高さと垂直方向の配置についての深い理解

>>:  MySQL のあまり知られていないソート方法

推薦する

フロントエンド制作に関する簡単な議論: 互換性のために IE6 はまだ必要ですか?

国内市場ではIE6~7のサポートに対する一定の需要がまだありますが、フロントエンド開発者として、私た...

WeChatミニプログラムがシームレスなスクロールを実現

この記事の例では、WeChatアプレットのシームレスなスクロールを実現するための具体的なコードを参考...

Vue3 ドラッグ可能な左パネルと右パネルの分割コンポーネントの実装

目次コンポーネントの分解左パネル右パネル入力パラメータの分解小道具スロット具体的な実装ドラッグする方...

Jenkins の紹介と Docker で Jenkins をデプロイする方法

1. 関連概念1.1 Jenkins の概念: Jenkins は、使用されるプラットフォームに関係...

データベースの冗長フィールドを合理的に使用する方法

privot は、多対多の関係の中間テーブルです。 PT5 フレームワークは自動的に privot ...

Vue要素と多言語切り替えの詳細な説明

目次序文複数の言語を切り替えるにはどうすればいいですか? 1. vue-i18nパッケージをインスト...

MySQL データベース アカウントの作成、認証、データのエクスポートおよびインポート操作の例

この記事では、MySQL データベースでのアカウントの作成、認証、データのエクスポートおよびインポー...

Vue3.0 手書きカルーセル効果

この記事では、Vue3.0の手書きカルーセル効果の具体的なコードを参考までに共有します。具体的な内容...

ネイティブJavaScriptでカルーセルを実装する

この記事では、JavaScriptでカルーセルを実装するための具体的なコードを参考までに紹介します。...

MySQL の null と not null、null と空の値の違いの詳細な説明 ''''

MySQL を長い間使用してきた多くの人は、これら 2 つのフィールド属性の概念をまだよく理解して...

jQuery エディタ プラグイン tinyMCE の使い方

簡略化されたファイル サイズを変更し、サンプルをダウンロードします。ファイルをローカル コンピュータ...

HTMLを使用してシンプルなメールテンプレートを作成する

今日は、「ローテク」の問題について書きたいと思います。ちなみに、私は JavaScript Week...

Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策

Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...

アイデアを使用して Springboot 初期化サーバーを構築する際の問題分析

問題の説明最近、Springbootプロジェクトを構築していたところ、会社のネットワークケーブルに接...

Tencent Cloudでhive3.1.2を構築する方法を教えます

環境の準備操作を開始する前に、hadoop バージョンがインストールされていることを確認してください...