更新:有和没有 jQuery 的解决方案
这个答案因展示 jQuery 示例而遭到如此多的反对,因此我决定添加更多带有 vanilla JavaScript 的示例,以便任何人都可以选择是否使用 jQuery。
通常,您可以.previousSibling
在 vanilla JavaScript 中使用,请参阅:
您可以.prev()
在 jQuery 中使用,请参阅:
但是请记住,当您不知道整个 DOM 的确切结构时,这些可能不适用于更复杂的情况。
下面是几个使用 jQuery 和 vanilla JavaScript 实现该目标的示例,适用于具有固定 DOM 结构的简单案例和使用类的更复杂案例。
没有课
对于最简单的 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
必须使用两次,因为否则将使用 tha span 和 link 之间的空文本节点。
见演示。
使用类
如果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
具有类“link”的元素,这将使用类“text”警告其兄弟span
元素包含的文本。(当然,类名应该比这更具描述性。)