Почему я не думаю, что это дубликат.
Хм, я думаю, что это немного отличается от того, что я спрашиваю. Я не хочу добавлять прослушиватель ко всем тегам A, а скорее вычесть атрибут href, если он есть, для цели события клика.
Я пытаюсь «Ajaxify» весь свой сайт, чтобы, когда пользователь щелкает ЛЮБУЮ ссылку, содержащуюся на странице, скрипт отправлял атрибут «url» или HREF
(выбранного элемента) в функцию Ajax, которая, в свою очередь, отображает запрошенный контент (как указано по нажатой ссылке).
Мне нужно найти атрибут HREF
выбранного элемента, если элемент является ссылкой. Проблема здесь заключается в том, что многие элементы могут содержаться в теге A (из-за того, как я их структурировал), и e.target.href
не обязательно всегда возвращает атрибут HREF
.
Вот что у меня есть до сих пор:
function ajaxifyLinks(e) {
var target = e.target;
e.preventDefault();
while(!target.href) {
target = target.parentNode;
}
if(target.href) {
ajaxLoad(target.href);
}
}
document.body.addEventListener('click', ajaxifyLinks);
А вот примеры разных «кликабельных» ссылок, которые у меня есть:
<!-- Link -->
<a href="/cats">
cats
</a>
<!-- Link -->
<a href="/hello">
<span>
<span> hi </span>
</span>
</a>
<!-- Link -->
<a href="/bye">
<span>
bye
</span>
</a>
Как видите, именно поэтому e.target.href
не всегда возвращает атрибут HREF, потому что вы на самом деле щелкаете по «связанному» элементу span, однако браузер направляет вас по ссылке. Почему это происходит? И есть ли способ извлечь выгоду из такого поведения? (Например, извлечение местоположения, куда ведет вас браузер, даже если вы не нажимаете на тег A).
Мне не нравится мое решение, потому что цикл while просто продолжает искать дерево DOM, иногда без необходимости (когда e.target не является ссылкой или содержится в ссылке).
Спасибо.
click
для большинства элементов HTML. - person PM 77-1   schedule 18.03.2015$(document).on('click', 'a[href]', function() { var href = $(this).attr('href'); })
- person Phil   schedule 18.03.2015