Как изменить href гиперссылки с помощью jQuery?
Для более новых версий jQuery: stackoverflow.com/a/6348239/4928642
простейший пример без jQuery stackoverflow.com/a/39276418/696535
Полный список возможных решений, некоторые полезные селекторы и способ получить значение совпадений регулярного выражения и использовать их для обновления href: stackoverflow.com/a/49568546/1262248



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


С использованием
$("a").attr("href", "http://www.google.com/")
изменит href всех гиперссылок, чтобы они указывали на Google. Тем не менее, вам, вероятно, понадобится более тонкий селектор. Например, если у вас есть сочетание тегов привязки источника ссылки (гиперссылки) и цели ссылки (также известной как «привязка»):
<a name = "MyLinks"></a>
<a href = "http://www.codeproject.com/">The CodeProject</a>
... Тогда вы, вероятно, не захотите случайно добавить к ним атрибуты href. В целях безопасности мы можем указать, что наш селектор будет сопоставлять теги <a> только с существующим атрибутом href:
$("a[href]") //...
Конечно, вы наверняка имеете в виду что-то более интересное. Если вы хотите сопоставить привязку с конкретным существующим href, вы можете использовать что-то вроде этого:
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/')
Это найдет ссылки, в которых href точно соответствует строке http://www.google.com/. Более сложная задача может быть сопоставление, а затем обновление только части href:
$("a[href^='http://stackoverflow.com']")
.each(function()
{
this.href = this.href.replace(/^http://beta\.stackoverflow\.com/,
"http://stackoverflow.com");
});
Первая часть выбирает только ссылки, где href начинается с http://stackoverflow.com. Затем определяется функция, которая использует простое регулярное выражение для замены этой части URL-адреса новой. Обратите внимание на гибкость, которую это дает вам - здесь можно внести любые изменения в ссылку.
"в HTML имена элементов нечувствительны к регистру, но в XML они чувствительны к регистру". - w3.org/TR/CSS21/selector.html
Для полноты, поскольку это все еще время от времени связывается, я добавлю, что, начиная с jQuery 1.4, последний пример не требует использования each - теперь возможно следующее: $(selector).attr('href', function() { return this.replace(/.../, '...'); });
@DavidHedlund Небольшая поправка: вы пропустили href: ...return this.href.replace(/.../, '...'); });
Используйте для поиска метод attr. Вы можете отключить любой атрибут с новым значением.
$("a.mylink").attr("href", "http://cupcream.com");
У меня это сработало, если я установил class = "mylink" в теге. Просто хотел уточнить, что на случай, если кто-то попытается установить name = "mylink", аналогичный ответу выше, и ожидает, что это сработает.
В зависимости от того, хотите ли вы изменить все идентичные ссылки на что-то еще или хотите контролировать только те, которые находятся в данном разделе страницы, или каждую из них по отдельности, вы можете сделать одно из этих действий.
Измените все ссылки на Google, чтобы они указывали на Google Maps:
<a href = "http://www.google.com">
$("a[href='http://www.google.com/']").attr('href',
'http://maps.google.com/');
Чтобы изменить ссылки в данном разделе, добавьте класс контейнера div в селектор. В этом примере будет изменена ссылка Google в контенте, но не в нижнем колонтитуле:
<div class = "content">
<p>...link to <a href = "http://www.google.com/">Google</a>
in the content...</p>
</div>
<div class = "footer">
Links: <a href = "http://www.google.com/">Google</a>
</div>
$(".content a[href='http://www.google.com/']").attr('href',
'http://maps.google.com/');
Чтобы изменить отдельные ссылки независимо от того, где они находятся в документе, добавьте идентификатор к ссылке, а затем добавьте этот идентификатор в селектор. В этом примере будет изменена вторая ссылка Google в контенте, но не первая или нижняя:
<div class = "content">
<p>...link to <a href = "http://www.google.com/">Google</a>
in the content...</p>
<p>...second link to <a href = "http://www.google.com/"
id = "changeme">Google</a>
in the content...</p>
</div>
<div class = "footer">
Links: <a href = "http://www.google.com/">Google</a>
</div>
$("a#changeme").attr('href',
'http://maps.google.com/');
Этот фрагмент вызывается при нажатии на ссылку класса menu_link и показывает текст и URL-адрес ссылки. Возвращение false предотвращает переход по ссылке.
<a rel='1' class = "menu_link" href = "option1.html">Option 1</a>
<a rel='2' class = "menu_link" href = "option2.html">Option 2</a>
$('.menu_link').live('click', function() {
var thelink = $(this);
alert ( thelink.html() );
alert ( thelink.attr('href') );
alert ( thelink.attr('rel') );
return false;
});
Я не слишком педантичен в отношении голосования против, но если вы не собираетесь говорить, почему вы голосуете против, то ничего не достигается, и вам не стоит беспокоиться.
Проголосовано против, потому что ваш фрагмент и ответ не отвечают на исходный вопрос и на самом деле не дают никакого объяснения того, почему информация, полученная с помощью фрагмента, полезна.
Голосование против - это педантично. Возможно, он / она не приложил столько усилий к своему ответу, как другие пользователи, но он / она действительно предоставил код для решения проблемы. OP просто нужно было бы немного подумать, помимо копирования и вставки индивидуального решения.
С jQuery 1.6 и выше вы должны использовать:
$("a").prop("href", "http://www.jakcms.com")
Разница между prop и attr заключается в том, что attr захватывает атрибут HTML, тогда как prop захватывает свойство DOM.
Вы можете найти более подробную информацию в этом посте: .prop () против .attr ()
Было бы признательно за объяснение того, почему вы должны использовать prop вместо attr, для людей, которые задаются вопросом и обнаруживают, что attr, по-видимому, отлично работает в новых версиях jQuery ...
@womble с использованием prop быстрее, чем attr, потому что он обновляет dom вместо изменения HTML. jsfiddle.net/je4G5
@Popnoodles Есть еще несколько вопросов, но было бы слишком долго объяснять их здесь. Так что читателям стоит просто взглянуть на ссылку для публикации. Тем не менее, резюме здесь было бы неплохо, иначе эта информация может быть потеряна ..
Even though the OP explicitly asked for a jQuery answer, you don't need to use jQuery for everything these days.
Если вы хотите изменить значение href элементов все<a>, выберите их все и затем выполните итерацию нодлист: (пример)
var anchors = document.querySelectorAll('a');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Если вы хотите изменить значение href для всех элементов <a>, которые фактически имеют атрибут href, выберите их, добавив селектор атрибутов [href] (a[href]): (пример)
var anchors = document.querySelectorAll('a[href]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Если вы хотите изменить значение href элементов <a>, которые содержать определенное значение, например google.com, используйте селектор атрибутов a[href* = "google.com"]: (пример)
var anchors = document.querySelectorAll('a[href* = "google.com"]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Точно так же вы также можете использовать другой селекторы атрибутов. Например:
a[href$ = ".png"] может использоваться для выбора элементов <a>, значение href которых заканчивается на .png.
a[href^ = "https://"] можно использовать для выбора элементов <a> со значениями href, которые равны с префиксом с https://.
Если вы хотите изменить значение href элементов <a>, которые удовлетворяют нескольким условиям: (пример)
var anchors = document.querySelectorAll('a[href^ = "https://"], a[href$ = ".png"]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
..нет необходимости в регулярном выражении в случаях самый.
$("a[href^='http://stackoverflow.com']")
.each(function()
{
this.href = this.href.replace(/^http://beta\.stackoverflow\.com/,
"http://stackoverflow.com");
});
Прекратите использовать jQuery только ради этого! Это так просто с помощью только JavaScript.
document.querySelector('#the-link').setAttribute('href', 'http://google.com');
https://jsfiddle.net/bo77f8mg/1/
Недостаточно jQuery.
Если вы установите плагин ShortCode Exec PHP, вы можете создать этот шорткод, который я назвал myjavascript
?><script type = "text/javascript">
jQuery(document).ready(function() {
jQuery("div.fusion-logo a").attr("href","tel:303-985-9850");
});
</script>
Теперь вы можете перейти в Внешний вид / Виджеты, выбрать одну из областей виджетов нижнего колонтитула и использовать текстовый виджет, чтобы добавить следующий шорткод
[myjavascript]
Селектор может меняться в зависимости от того, какое изображение вы используете и готов ли он к сетчатке, но вы всегда можете выяснить это с помощью инструментов разработчика.
Самый простой способ сделать это:
Функция Attr (начиная с jQuery версии 1.0)
$("a").attr("href", "https://stackoverflow.com/")
или же
Функция опоры (начиная с версии jQuery 1.6)
$("a").prop("href", "https://stackoverflow.com/")
Кроме того, преимущество вышеуказанного способа заключается в том, что если селектор выбирает одну привязку, он обновляет только эту привязку, а если селектор возвращает группу привязок, он обновит конкретную группу только с помощью одного оператора.
Теперь есть много способов определить точный якорь или группу якорей:
Довольно простые:
$("a")$("a:eq(0)")active): $("a.active")profileLink
ID): $("a#proileLink")$("a:first")Более полезные:
$("[href]")$("a[href='www.stackoverflow.com']")$("a[href!='www.stackoverflow.com']")$("a[href*='www.stackoverflow.com']")$("a[href^='www.stackoverflow.com']")$("a[href$='www.stackoverflow.com']")Теперь, если вы хотите изменить определенные URL-адреса, вы можете сделать это следующим образом:
Например, если вы хотите добавить прокси-сайт для всех URL-адресов, ведущих на google.com, вы можете реализовать его следующим образом:
$("a[href^='http://www.google.com']")
.each(function()
{
this.href = this.href.replace(/http://www.google.com//gi, function (x) {
return "http://proxywebsite.com/?query = "+encodeURIComponent(x);
});
});
href в атрибуте, так что вы можете изменить его, используя чистый JavaScript, но если у вас уже есть jQuery, внедренный на вашу страницу, не волнуйтесь, я покажу это в обоих направлениях:
Представьте, что у вас есть href ниже:
<a id = "ali" alt = "Ali" href = "http://dezfoolian.com.au">Alireza Dezfoolian</a>
А ты хочешь поменять ссылку ...
Используя чистый JavaScript без какой-либо библиотеки, вы можете:
document.getElementById("ali").setAttribute("href", "https://stackoverflow.com");
Но также в jQuery вы можете:
$("#ali").attr("href", "https://stackoverflow.com");
или же
$("#ali").prop("href", "https://stackoverflow.com");
В этом случае, если вы уже внедрили jQuery, возможно, jQuery выглядит короче и кроссбраузернее ... но в остальном я использую JS ...
Пытаться
link.href = 'https://...'
link.href = 'https://stackoverflow.com'<a id = "link" href = "#">Click me</a>
Для тех из вас, кто интересуется решениями без использование jQuery - stackoverflow.com/questions/179713/…