URL パラメータを付加してAnchorオブジェクトを動的に作成するときは、コンテンツの重複に注意します。
HTMLAnchorElementはURLUtilsインターフェイスを実装しており、そのプロパティはLocationオブジェクトと同じです。
以下はURLUtilsインターフェイスのプロパティです。
ドキュメントに次のa要素があるとき、
<!-- 1 --> <a href="/"></a> <!-- 2 --> <a href="#a"></a> <!-- 3 --> <a href="index.html"></a> <!-- 4 --> <a href="http://example.com/"></a> <!-- 5 --> <a href="http://example.com:1234/"></a>
それぞれのAnchorオブジェクトのプロパティは、ブラウザごとに下表のようになります。
プロパティ | IE9 | Firefox | Chrome | |
---|---|---|---|---|
1 | host | localhost:80 | localhost | |
hostname | localhost | |||
pathname | (空) | / | ||
href | http://localhost/ | |||
2 | host | localhost:80 | localhost | |
hostname | localhost | |||
pathname | sample.html | /sample.html | ||
href | http://localhost/sample.html#a | |||
3 | host | localhost:80 | localhost | |
hostname | localhost | |||
pathname | index.html | /index.html | ||
href | http://localhost/index.html | |||
4 | host | example.com:80 | example.com | |
hostname | example.com | |||
pathname | (空) | / | ||
href | http://example.com/ | |||
5 | host | example.com:1234 | ||
hostname | example.com | |||
pathname | (空) | / | ||
href | http://example.com:1234/ |
ブラウザによる違いは、次の2点です。
ドキュメントに、次のように追加したa要素があるとき、
var a1 = document.createElement( 'a' ); var a2 = document.createElement( 'a' ); var a3 = document.createElement( 'a' ); var a4 = document.createElement( 'a' ); var a5 = document.createElement( 'a' ); a1.href = '/'; a2.href = '#a'; a3.href = 'index.html'; a4.href = 'http://example.com/'; a5.href = 'http://example.com:1234/'; document.body.appendChild( a1 ); document.body.appendChild( a2 ); document.body.appendChild( a3 ); document.body.appendChild( a4 ); document.body.appendChild( a5 );
それぞれのAnchorオブジェクトのプロパティは、ブラウザごとに下表のようになります。
プロパティ | IE9 | Firefox | Chrome | |
---|---|---|---|---|
1 | host | (空) | localhost | |
hostname | (空) | localhost | ||
pathname | (空) | / | ||
href | http://localhost/ | |||
2 | host | (空) | localhost | |
hostname | (空) | localhost | ||
pathname | (空) | /sample.htm | ||
href | http://localhost/sample.htm#a | |||
3 | host | (空) | localhost | |
hostname | (空) | localhost | ||
pathname | index.html | /index.html | ||
href | http://localhost/index.html | |||
4 | host | example.com:80 | example.com | |
hostname | example.com | |||
pathname | (空) | / | ||
href | http://example.com/ | |||
5 | host | example.com:1234 | ||
hostname | example.com | |||
pathname | (空) | / | ||
href | http://example.com:1234/ |
FirefoxとChromeは、前述のHTMLで記述した場合と同じです。一方でIEは、
となります。
HTMLコード | 実行例 |
---|---|
<a onclick="alert('OK') ">Click</a> |
Click |
<a href="" onclick="alert('OK') ">Click</a> |
Click |
<a href="" onclick="alert('OK');return false">Click</a> |
Click |
HTMLコード | 実行例 |
---|---|
<a href="javascript:alert('OK')">Click</a> |
Click |
現在のドキュメントを変更しないようにするには、JavaScriptコードの最後の文で値を返さないようにします。
HTMLコード | 実行例 |
---|---|
<a href="javascript:confirm('OK') ">Click</a> |
Click |
<a href="javascript:confirm('OK');void 0">Click</a> |
Click |
URL部分は関数ではないため、onclickのようにreturn false
はできません。
hrefプロパティに、何も処理をしないjavascript疑似プロトコルのコードを記述します。
var link = document.createElement( 'a' ); link.href = 'javascript:;';
html - Which "href" value to use for JavaScript links: "#" or "javascript:void(0)"? - Stack Overflow
onclickイベントでfalseを返して、既定の処理を無効にします。このときhrefプロパティの内容は意味を持ちませんが、これが設定されていないとブラウザにリンクと認識されず、下線などが表示されません。しかし空文字を設定すると自ページへのリンクとして「訪問済みリンク」とみなされてしまうため、ここでもjavascript疑似プロトコルのコードを記述します。
var link = document.createElement( 'a' ); link.href = 'javascript:;'; link.onclick = function() { this.removeAttribute( 'href' ) return false; }
click()メソッドを呼び出すことで、Anchorオブジェクトをクリックできます。
<a href="/">Link</a> <button onclick="this.previousSibling.click()">Click</button>
href属性を削除することでリンクを無効化できます。たとえばonclickイベントでhref属性を削除すれば、2度クリックされることを防ぐことができます。
link.onclick = function() { this.removeAttribute( 'href' ) return false; }