更新: jQuery を使用する場合と使用しない場合のソリューション
この回答では、jQuery を使用した例を示すことに対して非常に多くの反対票が投じられたため、バニラ JavaScript を使用した例をさらに追加して、誰でも jQuery を使用するかどうかを選択できるようにすることにしました。
通常、.previousSibling
バニラ JavaScript で使用できます。以下を参照してください。
.prev()
jQueryで使用できます。次を参照してください。
ただし、DOM 全体の正確な構造がわからない場合、より複雑なケースでは機能しない可能性があることに注意してください。
DOM 構造が固定された単純なケースと、クラスを使用したより複雑なケースについて、jQuery とバニラ JavaScript の両方を使用してその目標を達成する例をいくつか示します。
クラスなし
最も単純な DOM 構造の場合、すべてのリンクにイベント リスナーを配置し、DOM の暗黙の知識に依存することでうまくいくかもしれませんが、これはより複雑な状況では機能しない可能性があります - それらについては、以下のクラスの例を参照してください。
jQuery の場合:
$('a').click(function () {
alert( $(this).prev().text() );
return false;
});
デモを参照してください。
jQuery を使用しない場合:
document.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
alert(link.previousSibling.previousSibling.innerText);
});
});
previousSibling
スパンとリンクの間にある空のテキスト ノードが別の方法で使用されるため、 を 2 回使用する必要があることに注意してください。
デモを参照してください。
クラスの使用
span
が要素の直前にない場合はa
、コードがページ上の他のリンクを壊さないようにいくつかのクラスを追加して、少し異なる方法で行うこともできます。
jQuery の場合:
$('a.link').click(function () {
alert( $(this).parent().find('span.text').text() );
return false;
});
デモを参照してください。
jQuery を使用しない場合:
document.querySelectorAll('a.link').forEach(link => {
link.addEventListener('click', () => {
alert(link.parentNode.querySelector('span.text').innerText);
});
});
デモを参照してください。
上記のコードは、クラス「リンク」を持つすべての要素にクリック ハンドラーをバインドします。これは、クラス「テキスト」を持つa
兄弟要素に含まれるテキストを警告します。span
(もちろん、クラス名はそれよりもわかりやすいものにする必要があります。)