Jak zmienić href dla hiperłącza za pomocą jQuery

Jak można zmienić href dla hiperłącza za pomocą jQuery?

Author: Kamil Kiełczewski, 2008-10-07

12 answers

Za pomocą

$("a").attr("href", "http://www.google.com/")

Zmodyfikuje href wszystkich hiperłączy, aby wskazywały na Google. Prawdopodobnie jednak potrzebujesz nieco bardziej wyrafinowanego selektora. Na przykład, jeśli masz mieszankę źródła linku (hiperłącze) i docelowego linku (aka "anchor") znaczników kotwicy:

<a name="MyLinks"></a>
<a href="http://www.codeproject.com/">The CodeProject</a>

...Wtedy prawdopodobnie nie chcesz przypadkowo dodać do nich atrybutów href. Dla bezpieczeństwa możemy określić, że nasz selektor będzie pasował tylko do znaczników <a> z istniejącym atrybutem href:

$("a[href]") //...

Oczywiście, pewnie masz coś ciekawszego na myśli. Jeśli chcesz dopasować anchor do konkretnej istniejącej href, możesz użyć czegoś takiego:

$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/')

To znajdzie linki, gdzie href dokładnie pasuje do ciągu http://www.google.com/. Może to być zadanie dopasowujące, a następnie aktualizujące tylko część href:

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

Pierwsza część wybiera tylko linki, gdzie href zaczyna się od http://stackoverflow.com. Następnie zdefiniowana jest funkcja, która używa prostego wyrażenia regularnego do zastąp tę część adresu URL nową. Zwróć uwagę na elastyczność, jaką daje Ci to-wszelkie modyfikacje linku można wykonać tutaj.

 1886
Author: Shog9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-08 00:51:01

Z jQuery 1.6 i nowszymi powinieneś użyć:

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

Różnica pomiędzy prop i attr jest taka, że attr chwyta atrybut HTML, podczas gdy prop chwyta właściwość DOM.

Więcej szczegółów znajdziesz w tym poście: .prop () vs .attr()

 288
Author: Jerome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 00:50:51

Użyj metody attr podczas wyszukiwania. Możesz wyłączyć dowolny atrybut z nową wartością.

$("a.mylink").attr("href", "http://cupcream.com");
 80
Author: Peter Shinners,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-07 18:20:45

W zależności od tego, czy chcesz zmienić wszystkie identyczne linki na coś innego, czy chcesz kontrolować tylko te w danej sekcji strony lub każdy z osobna, możesz to zrobić.

Zmień wszystkie linki do Google, aby wskazywały na Google Maps:

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

$("a[href='http://www.google.com/']").attr('href', 
'http://maps.google.com/');

Aby zmienić odnośniki w danej sekcji, Dodaj klasę kontenera div do selektora. Ten przykład zmieni link Google w treści, ale nie w stopce:

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

Aby zmienić poszczególne łącza niezależnie od tego, gdzie znajdują się w dokumencie, dodaj identyfikator do łącza, a następnie dodaj ten identyfikator do selektora. Ten przykład zmieni drugi link Google w treści, ale nie pierwszy ani ten w stopce:

<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/');
 41
Author: flamingLogos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-18 15:04:11

mimo że OP wyraźnie poprosił o odpowiedź jQuery, nie musisz używać jQuery do wszystkiego w dzisiejszych czasach.

Kilka metod bez jQuery:

  • Jeśli chcesz zmienić wartość href wszystkie <a> elementy, zaznacz je wszystkie, a następnie wykonaj iterację za pomocą nodelist : (przykład)

    var anchors = document.querySelectorAll('a');
    Array.prototype.forEach.call(anchors, function (element, index) {
        element.href = "http://stackoverflow.com";
    });
    
  • Jeśli chcesz zmienić href wartość wszystkich <a> elementów, które faktycznie wybierz atrybut href, dodając selektor atrybutów [href](a[href]): ( przykład)

    var anchors = document.querySelectorAll('a[href]');
    Array.prototype.forEach.call(anchors, function (element, index) {
        element.href = "http://stackoverflow.com";
    });
    
  • Jeśli chcesz zmienić wartość href elementów <a>, które zawierają określoną wartość, na przykład google.com, użyj selektora atrybutów a[href*="google.com"]: (przykład)

    var anchors = document.querySelectorAll('a[href*="google.com"]');
    Array.prototype.forEach.call(anchors, function (element, index) {
        element.href = "http://stackoverflow.com";
    });
    

    Podobnie, możesz również użyć innych selektorów atrybutów . Na przykład:

    • a[href$=".png"] może być używany do wybierz <a> elementy, których wartość href Kończy się na .png.

    • a[href^="https://"] może być używany do wybierania elementów <a> z wartościami href, które są prefiksem z https://.

  • Jeśli chcesz zmienić wartość href elementów spełniających wiele warunków: (przykład)

    var anchors = document.querySelectorAll('a[href^="https://"], a[href$=".png"]');
    Array.prototype.forEach.call(anchors, function (element, index) {
        element.href = "http://stackoverflow.com";
    });
    

..nie ma potrzeby stosowania regex, w większości przypadków .

 39
Author: Josh Crozier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-19 00:51:29

Prosty sposób to:

Funkcja Attr (od wersji jQuery 1.0)

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

Lub

Funkcja Prop (od wersji jQuery 1.6)

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

Zaletą powyższego sposobu jest to, że jeśli selektor wybierze pojedynczą kotwicę, zaktualizuje tylko tę kotwicę, a jeśli selektor zwróci grupę kotwicy, zaktualizuje określoną grupę za pomocą tylko jednej instrukcji.

Teraz, jest wiele sposobów, aby zidentyfikować dokładne kotwica lub grupa kotwic:

Dość Proste:

  1. Wybierz kotwicę poprzez nazwę tagu: $("a")
  2. Wybierz kotwicę przez indeks: $("a:eq(0)")
  3. Select anchor for specific classes (jak w tej klasie tylko anchory z klasą active) : $("a.active")
  4. Wybieranie kotwic o określonym ID (tutaj w przykładzie profileLink ID): {]}
  5. wybór pierwszej kotwicy href: $("a:first")

Bardziej przydatne:

  1. wybór wszystkie elementy z atrybutem href: $("[href]")
  2. wybór wszystkich kotwic o określonym href: $("a[href='www.stackoverflow.com']")
  3. wybranie wszystkich anchorów nie posiadających określonego href: $("a[href!='www.stackoverflow.com']")
  4. wybieranie wszystkich anchorów z href zawierającym konkretny URL: $("a[href*='www.stackoverflow.com']")
  5. wybór wszystkich anchorów z href zaczynających się od określonego adresu URL: $("a[href^='www.stackoverflow.com']")
  6. zaznaczenie wszystkich anchorów z href zakończonym określonym adresem URL: $("a[href$='www.stackoverflow.com']")

Teraz, jeśli chcesz zmienić określone adresy URL, możesz to zrobić as:

Na przykład, jeśli chcesz dodać stronę proxy dla wszystkich adresów URL google.com, można go zaimplementować w następujący sposób:

$("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);
    });
   });
 9
Author: Aman Chhabra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 04:51:53

Ten fragment wywołuje po kliknięciu linku klasy "menu_link" i pokazuje tekst i adres URL linku. Return false zapobiega śledzeniu łącza.

<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;
});
 8
Author: crafter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-10 09:17:24

Przestań używać jQuery tylko dla tego powodu! To jest tak proste tylko z JavaScript.

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

Https://jsfiddle.net/bo77f8mg/1/

 7
Author: Pawel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-03 20:44:52
 $("a[href^='http://stackoverflow.com']")
   .each(function()
   { 
      this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/, 
         "http://stackoverflow.com");
   });
 3
Author: Anup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-13 11:40:28

href w atrybutie, więc można go zmienić za pomocą czystego JavaScript, ale jeśli masz już jQuery wstrzykiwany na swojej stronie, nie martw się, pokażę to w obie strony:

Wyobraź sobie, że masz to href poniżej:

<a id="ali" alt="Ali" href="http://dezfoolian.com.au">Alireza Dezfoolian</a>

I lubisz zmieniać link...

Używając czystego JavaScript BEZ ŻADNEJ biblioteki, którą możesz zrobić:

document.getElementById("ali").setAttribute("href", "https://stackoverflow.com");

Ale także w jQuery możesz zrobić:

$("#ali").attr("href", "https://stackoverflow.com");

Lub

$("#ali").prop("href", "https://stackoverflow.com");

W tym przypadku, jeśli masz już wstrzykiwany jQuery, prawdopodobnie jQuery jeden wygląd krótszy i bardziej cross-browser...ale poza tym wybieram JS jeden...

 3
Author: Alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-01-19 04:44:26

Zmień HREF obrazu logo WordPress Avada theme

Jeśli zainstalujesz ShortCode Exec PHP plugin, możesz utworzyć ten Shortcode, który nazwałem myjavascript

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

Możesz teraz przejść do Wygląd/widżety i wybrać jeden z obszarów widżetu stopki i użyć widżetu tekstowego, aby dodać następujący Skrót

[myjavascript]

Selektor może się zmieniać w zależności od tego, jakiego obrazu używasz i czy jest gotowy do siatkówki, ale zawsze możesz to rozgryźć za pomocą narzędzi programistycznych.

 2
Author: Cooper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-24 18:20:15

Try

link.href = 'https://...'

link.href = 'https://stackoverflow.com'
<a id="link" href="#">Click me</a>
 0
Author: Kamil Kiełczewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-21 19:00:53