Как изменить href для гиперссылки, используя jQuery

1085

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

  • 11
    Для тех, кто интересуется решениями без использования jQuery, - stackoverflow.com/questions/179713/…
  • 1
    Для более новых версий jQuery: stackoverflow.com/a/6348239/4928642
Показать ещё 2 комментария
Теги:
hyperlink

11 ответов

1601
Лучший ответ

С помощью

$("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 новой. Обратите внимание на гибкость, которую это дает вам - здесь можно было бы внести какие-либо изменения в ссылку.

  • 3
    «в HTML имена элементов нечувствительны к регистру, но в XML они чувствительны к регистру». - w3.org/TR/CSS21/selector.html
  • 46
    Для полноты, поскольку это все еще время от времени связано, я добавлю, что начиная с jQuery 1.4, последний пример не требует использования each - теперь возможно следующее: $(selector).attr('href', function() { return this.replace(/.../, '...'); });
Показать ещё 2 комментария
263

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

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

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

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

  • 30
    Было бы attr получить объяснение, почему вы должны использовать prop over attr , для тех, кто придет к вопросу и обнаружит, что attr очевидно, прекрасно работает в новых версиях jQuery ...
  • 11
    @womble использует prop быстрее, чем attr потому что обновляет dom, а не модифицирует HTML. jsfiddle.net/je4G5
Показать ещё 1 комментарий
72

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

$("a.mylink").attr("href", "http://cupcream.com");
  • 2
    Это сработало для меня, если я установил class = "mylink" в теге a. Просто хотел уточнить, что в случае, если кто-то попытается установить name = "mylink" аналогично ответу выше и ожидать, что это сработает.
38

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

Измените все ссылки на Google, чтобы они указывали на Карты Google:

<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/');
31

Несмотря на то, что OP явно задал ответ на jQuery-ответ, в наши дни вам не нужно использовать jQuery.Суб >

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

  • Если вы хотите изменить значение href элементов all <a>, выберите их все и затем выполните итерацию через nodelist: (пример)

    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";
    });
    

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

9

Этот фрагмент вызывает, когда нажата ссылка класса '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;
});
  • 3
    Я не слишком педантичен в отношении отрицательного голосования, но если вы не собираетесь говорить, почему отказываетесь в голосовании, ничего не достигается, и вам не стоит об этом беспокоиться.
  • 2
    Проголосовано, потому что ваш фрагмент и ответ не отвечают на исходный вопрос и не дают никакого объяснения того, почему информация, полученная с помощью фрагмента, полезна.
Показать ещё 1 комментарий
6

Прекратите использовать jQuery только ради этого! Это так просто с использованием JavaScript.

document.querySelector('#the-link').setAttribute('href', 'http://google.com');

https://jsfiddle.net/bo77f8mg/1/

  • 6
    Не хватает jQuery.
3

Простой способ сделать это:

Функция Attr (начиная с версии jQuery версии 1.0)

$("a").attr("href", "https://stackoverflow.com/") 

или

Функция Prop (с версии jQuery 1.6)

$("a").prop("href", "https://stackoverflow.com/")

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

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

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

  1. Выберите имя тега с привязкой: $("a")
  2. Выберите привязку через индекс: $("a:eq(0)")
  3. Выберите привязку для определенных классов (как в этом классе только привязывается с active классом): $("a.active")
  4. Выбор якорей с определенным идентификатором (здесь в примере ID profileLink): $("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);
    });
   });
3
 $("a[href^='http://stackoverflow.com']")
   .each(function()
   { 
      this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/, 
         "http://stackoverflow.com");
   });
2

Измените HREF логотипа Wordpress для логотипа Wordpress

Если вы установите плагин ShortCode Exec PHP, вы можете создать этот Shortcode, который я назвал myjavascript

?><script type="text/javascript">
jQuery(document).ready(function() {
jQuery("div.fusion-logo a").attr("href","tel:303-985-9850");
});
</script>

Теперь вы можете перейти в Appearance/Widgets и выбрать одну из областей виджета нижнего колонтитула и использовать текстовый виджет, чтобы добавить следующий короткий код

[myjavascript]

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

0

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...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню