href属性のないアンカータグは安全ですか?


232

href属性を含めずに、JavaScriptクリックイベントハンドラーを使用してアンカータグを使用しても問題ありませんか?したがって、href完全に省略しhref=""ます。空にすることもできません()。


1
onclickイベントはまだトリガーされますか?それがサポートするCSSのみの合理的なタグがあるので、私が代わりにスパン/ DIVのアンカータグを使用する:IEでのホバー
ジョン・

3
@Martin ANCHORSには、キーボードからアクセスしてアクティブ化できます。通常のSPAN要素はできません。ここを参照してください:jsfiddle.net/simevidas/4DTxv/2
サイムVIDAS


2
HTML5では、href属性のないアンカーはプレースホルダーハイパーリンクです:dev.w3.org/html5/markup/a.html
Ignacio Lago

1
代わりにボタンを使用しないでよろしいですか?これは、タブなどが機能することを意味し、必要に応じてボタンをリンクのようにスタイル設定できます。確かに私はIEでホバーについて知りません。
robbie_c 2013年

回答:


217

HTML5では、属性のaない要素の使用hrefは有効です。「プレースホルダーハイパーリンク」と見なされます。

例:

<a>previous</a>

w3cアンカータグのリファレンスページで「プレースホルダーハイパーリンク」を探します:https ://www.w3.org/TR/2016/REC-html51-20161101/textlevel-semantics.html#the-a-element 。

そして、それはここのwikiでも言及されています:https//www.w3.org/wiki/Elements/a

プレースホルダーリンクは、アンカー要素を使用したいが、どこにも移動させない場合に使用します。これは、ナビゲーションメニューまたはパンくずリストで現在のページをマークアップするのに便利です。(古いアプローチでは、「アクティブ」または「現在」という名前のクラスでスパンタグまたはアンカータグを使用してスタイルを設定し、JavaScriptでナビゲーションをキャンセルしていました。)

プレースホルダーリンクは、実行時にJavaScriptを介してリンクのリンク先を動的に設定する場合にも役立ちます。href属性の値を設定するだけで、アンカータグがクリック可能になります。

以下も参照してください。


3
「プレースホルダーリンク」の定義は何ですか?
Gyum Fox

14
スタイルがないとhrefcursor: pointerスタイルが要素に自動的に追加されないことに注意してください。
ルーク

38

大丈夫ですが、同時に一部のブラウザが遅くなる可能性があります。

http://webdesignfan.com/yslow-tutorial-part-2-of-3-reducing-server-calls/

私のアドバイスは、<a href="#"> </a>を使用することです

JQueryを使用している場合は、次も使用することを忘れないでください。

.click(function(event){
    event.preventDefault();
    // Click code here...
});

7
ハッシュの変更を伴うajaxブックマークを使用しているため、href = "#"を使用できません。どうすればよいですか?
ジョン

5
javascript:void(0);を使用する代わりに hrefの内部では、javascript:を使用しています。書く方が短いです。
アリー

16
パフォーマンスのペナルティは、実際に空のhref属性を指定した場合にのみ適用されます。質問は、href属性がまったくないことを示しています。
ピートB

18
実際、この記事によると(そしてそれは理にかなっています)、潜在的なパフォーマンスのペナルティは空のsrc属性にのみ適用されます。空のhref属性のパフォーマンスについては何も述べていません。
bergie3000 2013年

1
@Gunnar様こんにちは、リンクがなくなったようです。申し立てについて別の参照がありますか?
user31782 2017年

25

短い答え:いいえ。

長い答え:

まず、href属性がないと、リンクにはなりません。リンクでない場合、キーボード(またはブレススイッチ、またはその他のさまざまなポインターベースではない入力デバイス)からアクセスできません(HTML 5の機能がtabindex普遍的にサポートされていない場合を除く)。コントロールがキーボードアクセスを持たないことが適切であることは非常にまれです。

二番目。JavaScriptが実行されない(サーバーからの読み込みが遅い、インターネット接続が切断された(移動中の電車の携帯信号など)、JSがオフになっているなど)ための代替手段が必要です。

控えめなJSによるプログレッシブ拡張を利用してください


問題は、jQueryの「クリック」メソッドを使用してクリックイベントをアタッチできる何かが必要なことです。これも、マウスをロールオーバーするとリンクのように強調表示され、下線が引かれます。CSSなしでhref-lessアンカータグ以外に何ができるでしょうか?(つまり、jQueryを介したダイレクトクリック関数の割り当てのシンプルさを維持しながら、基本的な対話を手動で追加せずに現状のままです)。
Triynko

@Triynko —リンクを使用しますが、適切に実行してください。回答の最後の行をご覧ください。
クエンティン

5
'a'タグのTabindexは、HTML4以降(少なくとも)w3schools.com/tags/att_global_tabindex.asp
technoTarek

@technoTarek —はい、ただしhref必須です(それが名前付きアンカーで、tabindexが意味をなさない場合を除く)。使用tabindexタブ順序にunfocusable要素を追加するには、HTML 5の新しい技術革新である
クエンティン

4
これは単に間違っています。その時点でHTMLの古い仕様を参照していたかどうかはわかりませんが、HTML5仕様によればahref属性のないタグがあることは確かに完全に有効です。
マイケル2016

23

後方互換性のためにhrefを使用する必要がある場合は、

<a href="javascript:void(0)">link</a>

#の代わりに、属性を使用したくない場合


1
関数以外のすべてのリンクのように動作する<a>タグが必要でした。これは私にとってはトリックでした。
Jad S

13

タグは、href属性なしで使用しても問題ありません。ここでの回答の多くに反して、hrefがないときにアンカーを作成する標準的な理由があります。意味的には、「a」はアンカーまたはリンクを意味します。その意味に続くものにそれを使用する場合は、問題ありません。

hrefなしのaタグの標準的な用途の1つは、名前付きリンクを作成することです。これにより、name = blahでアンカーを使用でき、後でhref =#blahでアンカーを作成して、現在のページの名前付きセクションにリンクできます。ただし、同じ方法でIDを使用することもできるため、これは廃止されました。例として、id = headerでヘッダータグを使用し、後でhref =#headerを指すアンカーを使用できます。

ただし、私のプロパティは、nameプロパティの使用を提案することではありません。hrefを必要としないユースケースを1つだけ提供するため、hrefが必要でない理由を推論します。


2
私が質問しようとしていること、および他の回答が扱っていることは、インタラクティブな要素(つまりリンク)として使用されている要素のhref属性を省略しても安全かどうかだと思います。おっしゃるように、属性がなければ、それは非常に単純です...リンクではなく、単なるアンカーです。これは、まったく別のものです。<a>href
BoltClock

1
そうですが、強調するだけですが、<a>タグはこれらの使用例でも有効です。
モノクローム2016

9

アクセシビリティの観点からは<a>、hrefがないとタブに対応できないため、すべてのリンクはタブに対応する必要があるため、hrefがない場合はtabindex = '0 "を追加します。


1
または、リダイレクトではなくページはめ込みアクションを実行する場合は、ボタンを使用します。
SimonDever 2015

8

<a>マルチレベルのメニューを使用する場合、「HREF」のないタグは便利なことができ、あなたは次のレベルを展開する必要があるが、そのメニューラベルがアクティブリンクになりたくありません。私はそれをそのように使用することに問題を経験したことがありません。


1
キーボードでそのメニューにアクセスしてみましたか?
aij 2016年

IEで、いくつかのリンクにカーソルを合わせ、1つがhrefのないアンカーである場合、以下のURLの小さなポップアップがそのまま表示され、前のURLが表示されるのではなく、表示されることがわかりました。アンカーはクリックできませんが、大きな問題ではありませんが、代わりにdivで十分です。
Andrew

1

一部のブラウザでは、href属性を指定しないと問題が発生します。このようなコードを書くことをお勧めします:

<a href="#" onclick="yourcode();return false;">Link</a>

yourcode()を独自の関数またはロジックに置き換えることができますが、必ずfalseを追加してください。最後にステートメント。


私はBackbone.RouterでBackbone.jsを使用して#おり、インデックスページを持っています。私のnavbarリンクのいくつかについては、それ自体#を使用a href="#"した場合に何が起こるかというルートをトリガーしたくありません。を使用<a href="#" onclick="return false;"すると、ルートのトリガーが停止しますが、クリックイベントは引き続きハンドラー(jQueryおよびBackbone.Radioを介してフックされたDOMイベントを使用します)に送られます。ありがとう@ shashwat13 :)
デビッド・ウィリアムソン、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.