#javascript #jquery #href
#javascript #jquery #href
Вопрос:
Я использую стороннюю систему, которая позволяет нам добавлять пользовательский javascript, и мне нужен способ поиска пользовательского URL, а затем система выводит логин пользователя, который вызывается нажатием на href=»javascript:;»
< a class="nav-link" href="javascript:;"> < b>sign in</b></ a>
Обратите внимание, что class=»nav-link» НЕ является уникальным
У меня нет проблем с поиском пользовательского URL-адреса и выполнением различных действий, но я не знаю, как выполнить имитацию события щелчка по этому javascript href, чтобы он отображал логин пользователя.
Например, приземление на: «https://our.site.com/webstoreNew/services/guestprofile » Пользовательская часть URL-адреса — это «guestprofile», и она не перенаправляется основной системой и остается
Я пробовал следующее:
<script>
const guest_url = "https://our.site.com/webstoreNew/services/guestprofile";
let current_url = window.location.href;
if(current_url === guest_url) {
$('href="javascript:;"')[0].click();
}
</script>
другие вещи, которые пытались:
$(javascript:;)[0].click();
$(href="javascript:;")[0].click();
Я чувствую, что это, вероятно, проблема синтаксиса, но нужна чья-то помощь
Комментарии:
1. Является ли HTML-часть вашего вопроса прямой копией фактического кода? Если это так, элемент привязки имеет неправильную форму HTML, поскольку теги начинаются с «<«, за которым сразу следует имя тега, без пробелов между ними. То же самое для закрывающего тега, он начинается с «</», за которым сразу следует имя тега.
2. Извините.. я вставил пробелы, но в реальном коде нет пробелов. <a class=»nav-link» href=»javascript:;»> <b>войдите</b></a>
Ответ №1:
РЕДАКТИРОВАТЬ: обновлено с добавлением большего количества вашего кода и удален код, который будет работать в сниппете.
Проверьте мой фрагмент ниже, просто создайте функцию и вызовите ее, как в моем примере ниже fakeClick();
.
Если вы хотите настроить таргетинг на упомянутую вами ссылку, вы можете использовать querySelector следующим образом:
const href = document.querySelector('[href="javascript:;"]');
Приведенный ниже фрагмент не вызовет щелчок, потому что мы используем window.location.href;
, который не поддерживается в фрагментах stackoverflow. При этом, если вы запустите это в своем проекте, оно будет функционировать должным образом.
//your guest url
const guest_url = "https://our.site.com/webstoreNew/services/guestprofile";
let current_url = window.location.href;
//this is the a element where we trigger the click
const href = document.querySelector('[href="javascript:;"]');
console.log(href);
//this is the function
//if both are equal it will trigger a click on atag
function fakeClick() {
if(current_url === guest_url) {
href.click();
}
}
//here we are calling the function so it will run immediately
fakeClick();
<a class="nav-link" href="javascript:;"><b>sign in</b></a>
Кроме того, как упоминал @Oskar Grosser, если вы хотите использовать код из вашего примера, вам просто нужно изменить неправильный вызов из этого:
$('href="javascript:;"')[0].click();
}
Для этого:
$('[href="javascript:;"]')[0].click();
}
Как вы можете видеть, скорректированный Jquery соответствует вызову querySelector и должен функционировать таким же образом.
Комментарии:
1. Я думаю, что проблема здесь в элементе «a». В моем случае такого элемента нет, и это просто ссылка href=»javascript:;». Как показано здесь < a class=»nav-link» href=»javascript:;»> < b>войдите</b></ a>
2. developer.mozilla.org/en-US/docs/Web/API/Document/querySelector — Вы можете использовать querySelector для поиска href. Это мощный метод, который может помочь вам ссылаться на что угодно на вашей странице. — Просто замените вызов запроса atag на что-то, что может ссылаться на ваш href.
3. Я обновил свой ответ, чтобы показать, как вы можете настроить таргетинг на этот href.
Ответ №2:
С помощью jQuery вы запрашиваете один или несколько элементов, используя селекторы CSS.
Поскольку вы хотите запросить точный атрибут, вы должны отформатировать строку запроса следующим образом:
[attributeName="value"]
Еще одно замечание: то, что вы запрашиваете, должно быть в строке. При других ваших попытках браузер пытается разрешить javascript
и href
, как если бы это были переменные, отсюда и ошибки.
Сам click()
по себе вызов является правильным, что приведет к возникновению события щелчка.
// Setup for feedback; ignore
$("a").click(() => console.log("'a' was clicked!"));
// Correct query
$('[href="javascript:;"]').click();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="javascript:;">A link</a>
Комментарии:
1. Это здорово, но по какой-то причине система говорит следующее: Uncaught TypeError: не удается прочитать свойство ‘click’ из null в guestprofile:42 Я несколько раз менял URL-адрес, чтобы узнать, проблема ли это, но нет.