Як змінити href для гіперпосилання за допомогою jQuery


1267

Як ви можете змінити href для гіперпосилання за допомогою jQuery?


12
Для тих, хто цікавиться рішеннями без використання jQuery - stackoverflow.com/questions/179713/…
— Джош Крозьє,

1
Для більш нових версій JQuery: stackoverflow.com/a/6348239/4928642
— Qwertiy

1
найпростіший приклад без jQuery stackoverflow.com/a/39276418/696535
— Pawel

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

Відповіді:


1831

Використання

$("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
— безглазкість

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

14
@DavidHedlund Невелика корекція: ви пропустили href: ...return this.href.replace(/.../, '...'); });
— Armstrongest

280

З jQuery 1.6 і вище слід використовувати:

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

Різниця між propі attrполягає в тому, що attrзахоплює атрибут HTML, тоді як propзахоплює властивість DOM.

Докладнішу інформацію можна знайти в цьому дописі: .prop () vs .attr ()


32
Пояснення, чому слід використовувати propнадattr були б оцінені, для людей , які приїжджають на це питання і знайти по- attrвидимому , працює прекрасно в більш нових версіях JQuery ...
— Уомбл

11
@womble використовувати propшвидше, ніж attrтому, що він оновлює dom замість зміни HTML. jsfiddle.net/je4G5
— Popnoodles

2
@Popnoodles Є більше питань, ніж це, але було б занадто довго, щоб пояснити їх усі тут. Тож читачі повинні просто подивитися на пост, пов’язаний із життям. Однак підсумок тут був би непоганим, інакше ця частина інформації
— ніби

78

Використовуйте attrметод під час пошуку. Ви можете вимкнути будь-який атрибут з новим значенням.

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

2
Це спрацювало для мене, якщо я встановив class = "mylink" у тезі. Просто хотів уточнити, що у випадку, якщо хтось спробує встановити name = "mylink", подібний до відповіді вище, і очікує, що це спрацює.
— cpuguru

40

Залежно від того, чи хочете ви змінити всі однакові посилання на щось інше чи хочете контролювати лише ті, що знаходяться в певному розділі сторінки, або кожному окремо, ви можете зробити одне із них.

Змініть усі посилання на Google, щоб вони вказували на Карти Google:

<a href="http://www.google.com">

$("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>
</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/');

36

Незважаючи на те, що ОП явно попросила відповідь на jQuery, вам не потрібно використовувати jQuery для всього цього дня.

Кілька методів без 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";
    });

..не потрібна регулярна виразка, в більшості випадків.


9

Цей фрагмент викликає при натисканні на посилання класу 'menu_link' та показує текст та URL-адресу посилання. Неправильне повернення запобігає дотриманню посилання.

<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
Оголошення, оскільки ваш фрагмент та відповідь не відповідають на початкове запитання, і насправді не дає пояснення, чому інформація, отримана за допомогою фрагмента, є корисною.
— Девід Міллар

5
Вниз голосування це педантично. Він / вона, можливо, не доклав би таких зусиль, як інші користувачі, але він дійсно надав код для вирішення проблеми. ОП просто потребує трохи більше думок, окрім копіювання та вставлення рішення на замовлення.
— Ulises

8

Простий спосіб зробити це:

Функція 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 ідентифікатор):$("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);
    });
   });

6

Перестаньте використовувати jQuery лише заради цього! Це так просто лише з JavaScript.

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

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


8
Не вистачає jQuery.
— malckier

3
 $("a[href^='http://stackoverflow.com']")
   .each(function()
   { 
      this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/, 
         "http://stackoverflow.com");
   });

2

Змініть HREF зображення логотипу теми Wordpress Avada

Якщо ви встановите плагін PHP ShortCode Exec, ви можете створити цей Код, який я назвав myjavascript

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

Тепер ви можете перейти в «Вигляд / віджети» і вибрати одну з областей віджетів нижнього колонтитулу та скористатися текстовим віджетом, щоб додати такий короткий код

[myjavascript]

Селектор може змінюватись залежно від того, яке зображення ви використовуєте та чи готово сітківка, але ви завжди можете це визначити, використовуючи інструменти для розробників.


2

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одним ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.