Как изменить href гиперссылки с помощью jQuery

Как изменить href гиперссылки с помощью jQuery?

Для тех из вас, кто интересуется решениями без использование jQuery - stackoverflow.com/questions/179713/…

Josh Crozier 19.01.2015 03:59

Для более новых версий jQuery: stackoverflow.com/a/6348239/4928642

Qwertiy 23.12.2016 17:42

простейший пример без jQuery stackoverflow.com/a/39276418/696535

Pawel 04.10.2017 18:00

Полный список возможных решений, некоторые полезные селекторы и способ получить значение совпадений регулярного выражения и использовать их для обновления href: stackoverflow.com/a/49568546/1262248

Aman Chhabra 30.03.2018 07:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1 320
4
1 500 261
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Ответ принят как подходящий

С использованием

$("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

eyelidlessness 07.10.2008 22:25

Для полноты, поскольку это все еще время от времени связывается, я добавлю, что, начиная с jQuery 1.4, последний пример не требует использования each - теперь возможно следующее: $(selector).attr('href', function() { return this.replace(/.../, '...'); });

David Hedlund 11.08.2010 18:17

@DavidHedlund Небольшая поправка: вы пропустили href: ...return this.href.replace(/.../, '...'); });

Armstrongest 13.10.2012 09:06

Используйте для поиска метод attr. Вы можете отключить любой атрибут с новым значением.

$("a.mylink").attr("href", "http://cupcream.com");

У меня это сработало, если я установил class = "mylink" в теге. Просто хотел уточнить, что на случай, если кто-то попытается установить name = "mylink", аналогичный ответу выше, и ожидает, что это сработает.

cpuguru 23.06.2015 18:22

В зависимости от того, хотите ли вы изменить все идентичные ссылки на что-то еще или хотите контролировать только те, которые находятся в данном разделе страницы, или каждую из них по отдельности, вы можете сделать одно из этих действий.

Измените все ссылки на 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;
});

Я не слишком педантичен в отношении голосования против, но если вы не собираетесь говорить, почему вы голосуете против, то ничего не достигается, и вам не стоит беспокоиться.

crafter 05.08.2012 16:57

Проголосовано против, потому что ваш фрагмент и ответ не отвечают на исходный вопрос и на самом деле не дают никакого объяснения того, почему информация, полученная с помощью фрагмента, полезна.

David Millar 26.09.2012 00:43

Голосование против - это педантично. Возможно, он / она не приложил столько усилий к своему ответу, как другие пользователи, но он / она действительно предоставил код для решения проблемы. OP просто нужно было бы немного подумать, помимо копирования и вставки индивидуального решения.

Ulises 11.12.2012 00:54

С jQuery 1.6 и выше вы должны использовать:

$("a").prop("href", "http://www.jakcms.com")

Разница между prop и attr заключается в том, что attr захватывает атрибут HTML, тогда как prop захватывает свойство DOM.

Вы можете найти более подробную информацию в этом посте: .prop () против .attr ()

Было бы признательно за объяснение того, почему вы должны использовать prop вместо attr, для людей, которые задаются вопросом и обнаруживают, что attr, по-видимому, отлично работает в новых версиях jQuery ...

womble 01.01.2012 07:26

@womble с использованием prop быстрее, чем attr, потому что он обновляет dom вместо изменения HTML. jsfiddle.net/je4G5

Popnoodles 11.06.2014 01:57

@Popnoodles Есть еще несколько вопросов, но было бы слишком долго объяснять их здесь. Так что читателям стоит просто взглянуть на ссылку для публикации. Тем не менее, резюме здесь было бы неплохо, иначе эта информация может быть потеряна ..

Rauni Lillemets 26.11.2015 13:13

Even though the OP explicitly asked for a jQuery answer, you don't need to use jQuery for everything these days.

Несколько методов без jQuery:

  • Если вы хотите изменить значение 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.

malckier 05.09.2016 17:44

Измените HREF изображения логотипа темы Wordpress Avada

Если вы установите плагин 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/")

Кроме того, преимущество вышеуказанного способа заключается в том, что если селектор выбирает одну привязку, он обновляет только эту привязку, а если селектор возвращает группу привязок, он обновит конкретную группу только с помощью одного оператора.

Теперь есть много способов определить точный якорь или группу якорей:

Довольно простые:

  1. Выберите привязку через имя тега: $("a")
  2. Выбрать якорь по индексу: $("a:eq(0)")
  3. Выберите привязку для определенных классов (так как в этом классе только привязки с классом active): $("a.active")
  4. Выбор якорей с определенным идентификатором (здесь, в примере profileLink ID): $("a#proileLink")
  5. Выбор первого якоря href: $("a:first")

Более полезные:

  1. Выбор всех элементов с атрибутом href: $("[href]")
  2. Выбор всех анкеров с определенным href: $("a[href='www.stackoverflow.com']")
  3. Выбор всех якорей без определенного href: $("a[href!='www.stackoverflow.com']")
  4. Выбор всех якорей с href, содержащим конкретный URL: $("a[href*='www.stackoverflow.com']")
  5. Выбор всех якорей с href, начинающихся с определенного URL: $("a[href^='www.stackoverflow.com']")
  6. Выбор всех якорей с href, заканчивающихся определенным URL: $("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>

Другие вопросы по теме