#javascript #html #web #event-handling
#javascript #HTML #веб #обработка событий
Вопрос:
мы используем instapage в качестве инструмента для целевых страниц, и они удаляют параметры URL из ссылок, если пользователи нажимают на теги с внешними ссылками. Я хочу сохранить location.search.
Я пытался использовать этот скрипт здесь, но он вообще не работает — например, параметры по-прежнему удаляются, если они не указаны в ссылке href .
window.addEventListener("click", function(e) {
var href = e.target.getAttribute("href");
if(href) {
location.href = href window.location.search;
e.preventDefault();
}
});
Что-нибудь очевидное, чего мне здесь не хватает?
Комментарии:
1. Почему прослушиватель событий привязан к окну? Использование
target
может не делать то, что вы думаете. Попробуйте щелкнуть промежуток внутри ссылки, и я думаю, вы обнаружитеtarget
, что это промежуток2. @evolutionxbox к чему еще он должен быть прикреплен? Прослушиватель должен присутствовать на всей странице. Скрипт также проверяет href элемента, на который нажат, и все ссылки на сайте являются тегами <a> .
3. Это не обязательно. Вместо этого вы можете прослушать щелчок по ссылкам.
document.querySelectorAll('a').forEach(link => addEventListener('click', ...))
4. Я пробовал это (и некоторые другие решения, использующие это), но это не устраняет проблему.
5. Возможно, параметры удаляются при загрузке страницы? Почему бы не изменить HREF с помощью JavaScript?
Ответ №1:
Я решил проблему, просто изменив hrefs при загрузке страницы вместо того, чтобы пытаться добавить параметры onClick . Вот код, также учитывающий URL-адреса, в которых уже есть параметры.
document.addEventListener("DOMContentLoaded", function(event) {
document.querySelectorAll('[href^="http"]').forEach((element) => {
var hrefString = element.getAttribute('href')
if(hrefString.includes('?')) {
element.setAttribute('href', hrefString window.location.search.replace('?', 'amp;') )
} else {
element.setAttribute('href', hrefString window.location.search)
}
})
});