#javascript #jquery
#javascript #jquery
Вопрос:
у меня есть меню:
<ul id="main-menu">
<li><a href="https://myplace.com/products/">Products</a></li>
<li><a href="https://myplace.com/services/">Services</a></li>
<li><a href="https://myplace.com/contact/">Contact</a></li>
</ul>
я хотел бы перенаправить контакт с именем привязки на othersite.com
Комментарии:
1. просто измените
href
? или, если вы хотите открыть его на новой вкладке, добавьтеtarget="_blank"
привязку.2. нет-нет, я не могу изменить этот html, в этом проблема. но я могу добавить javascript
3. Вы можете: (1) изменить
href
атрибут вашей ссылки, (2) создать страницу контакта и установить перенаправление на другой сайт, (3) создать страницу контакта, содержащую iframe, который загружает содержимое другого сайта, (4) реализовать перенаправление на стороне сервера. Возможно, я забываю некоторые другие варианты. Можете ли вы объяснить, почему, по вашему мнению, это должно быть сделано с помощью JavaScript или jQuery, пожалуйста? Есть ли какие-либо особые требования или ограничения?
Ответ №1:
Как вы упомянули в комментариях, что вам нужно использовать JS для редактирования href
и что вы не можете изменить HTML, вы можете сделать это следующим образом:
var oldhref = "https://myplace.com/contact/"
var newhref = "https://othersite.com/"
$(document).ready(function() {
$("[href='" oldhref "']").prop("href", newhref)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="main-menu">
<li><a href="https://myplace.com/products/">Products</a></li>
<li><a href="https://myplace.com/services/">Services</a></li>
<li><a href="https://myplace.com/contact/">Contact</a></li>
</ul>
Это позволит найти a
элемент на его основе href
и заменить его без каких-либо изменений в HTML.
Версия, которая выбирается на основе текста ссылки, а не ее href
:
var linkText = "Contact"
var newhref = "https://othersite.com/"
$(document).ready(function() {
$("a:contains('" linkText "')").filter(function(i) {
return $(this).text() === linkText
}).prop("href", newhref).attr("target", "_blank")
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="main-menu">
<li><a href="https://myplace.com/products/">Products</a></li>
<li><a href="https://myplace.com/services/">Services</a></li>
<li><a href="https://myplace.com/contact/">Contact</a></li>
</ul>
Комментарии:
1. но можете ли вы предоставить код: найдите конкретные имена привязок (не URL) и замените их…
2. @Gallex Я обновил ответ версией, которая работает на основе текста ссылки, а не ее
href
3. вот и все, спасибо! не могли бы вы добавить в свой код еще одну вещь: открыть эту новую ссылку на новой странице (новая вкладка)?
4. @Gallex я добавил
.attr("target", "_blank")
, чтобы ссылка открывалась на новой вкладке.
Ответ №2:
Найдите элемент с идентификатором main-menu
и добавьте прослушиватель click
событий. Кроме того, с помощью Event.preventDefault
вы можете остановить действие по умолчанию, которое будет выполняться при щелчке anchor
элемента.
document.getElementById("main-menu").addEventListener("click", (event) => {
const { target } = event;
if(target.innerHTML === "Contact") {
event.preventDefault();
window.open("https://othersite.com/", '_blank');
}
})
<ul id="main-menu">
<li><a href="https://myplace.com/products/">Products</a></li>
<li><a href="https://myplace.com/services/">Services</a></li>
<li><a href="https://myplace.com/contact/">Contact</a></li>
</ul>
Комментарии:
1. Да, он не заменит, но затем при нажатии на
Contact
него перенаправит наhttps://othersite.com/
Ответ №3:
Я что-то упустил? вы можете заменить ссылку в разделе контактов на othersite.com
<ul id="main-menu">
<li><a href="https://myplace.com/products/">Products</a></li>
<li><a href="https://myplace.com/services/">Services</a></li>
<li><a href="https://othersite.com/">Contact</a></li>
</ul>