Обновление: решения с jQuery и без него
Этот ответ получил так много отрицательных голосов за демонстрацию примера с jQuery, что я решил добавить больше примеров с ванильным JavaScript, чтобы каждый мог выбрать, использовать ли jQuery или нет.
Как правило, вы можете использовать .previousSibling
в ванильном JavaScript, см.:
и вы можете использовать .prev()
в jQuery, см.:
Но имейте в виду, что они могут не работать в более сложных случаях, когда вы не знаете точную структуру всего вашего DOM.
Вот несколько примеров достижения этой цели как с помощью jQuery, так и с помощью ванильного JavaScript, для простых случаев с фиксированной структурой DOM и для более сложных случаев с использованием классов.
Без занятий
Для самых простых структур DOM вам может сойти с рук размещение прослушивателей событий во всех ссылках и использование неявного знания DOM, но это может не сработать для более сложных ситуаций — см. примеры с классами ниже.
С jQuery:
$('a').click(function () {
alert( $(this).prev().text() );
return false;
});
См. DEMO.
Без jQuery:
document.querySelectorAll('a').forEach(link => {
link.addEventListener('click', () => {
alert(link.previousSibling.previousSibling.innerText);
});
});
Обратите внимание, что previousSibling
нужно использовать дважды, потому что в противном случае будет использоваться пустой текстовый узел, который находится между диапазоном и ссылкой.
См. ДЕМО.
Использование классов
Если span
не находится непосредственно перед вашим элементом a
, вы также можете сделать это немного по-другому, а также добавить несколько классов, чтобы убедиться, что ваш код не нарушает другие ссылки на странице:
С jQuery:
$('a.link').click(function () {
alert( $(this).parent().find('span.text').text() );
return false;
});
См. DEMO.
Без jQuery:
document.querySelectorAll('a.link').forEach(link => {
link.addEventListener('click', () => {
alert(link.parentNode.querySelector('span.text').innerText);
});
});
См. ДЕМО.
Приведенный выше код привязывает обработчики кликов к каждому элементу a
с классом «ссылка», который будет предупреждать текст, содержащийся в его родственном элементе span
с классом «текст». (Конечно, имена классов должны быть более описательными.)
person
rsp
schedule
23.01.2013