こんにちは、さるまりんです。
JavaScriptでクリックしたところのリンク先を取りたい事があります。ただ、そのクリックしたところが<a>
タグであるとは限らないです。画像をクリックするとクリックイベントはその<img>
タグで発生しますし、エリアをクリックすると<span>
だったり<div>
だったりの場合もあります。
なので、リンク先を取得したい場合、そのクリックイベントが発生したところを囲む<a>
タグのhref
属性を取得する必要があります。
どうするか?
クリックされた要素からその親要素の<a>
タグまでたどっていき、そのhref
属性を取得します。
以下その例です。
こんなHTMLがあります。
<a>
タグの内側に<span>
でテキストの要素があります。
<a href="/to-somewhere" id="a-link">
<span>リンクのテキスト</span>
</a>
次のようなJavaScriptで<a>
タグのhref
属性を取得できます。
document.addEventListener('click', function(event) {
// クリックされた要素を取得
let target = event.target;
// クリックされた要素が<a>タグか、もしくはその子要素か確認
let aTag = target.closest('a');
if (aTag) {
// <a>タグのhref属性を取得
let href = aTag.getAttribute('href');
console.log('リンク先:', href);
}
});
コメントにもありますが簡単にコードの流れは次のようなものです。
event.target
でクリックされた要素を取得します。closest('a')
でクリックされた要素が含まれるもっとも近い<a>
タグを探し<a>
タグが取得できていたら、そのhref
属性をgetAttribute('href')
で取得
closest('a')
は<a>
タグがクリックされた場合でも<span>
タグがクリックされた場合でも正しく<a>
タグを取得してくれます。
クリックして取れたのが<span>
だったときに、「あれ?ひとつずつごりごりと親を探さないといけない?」と思いましたが、こんな便利な機能があったんですね。
読んでくださってありがとうございました。
それではまた!