JQuery kullanarak köprü için href değiştirme


1267

JQuery kullanarak bir köprü href nasıl değiştirebilirsiniz?


12
Çözümleri ile ilgilenen olanlar için olmadan - jQuery kullanımı stackoverflow.com/questions/179713/...
Josh Crozier

1
Daha yeni jQuery sürümleri için: stackoverflow.com/a/6348239/4928642
Qwertiy

1
olmadan en basit örnek jQuery stackoverflow.com/a/39276418/696535
Pawel

Olası çözümlerin, bazı kullanışlı seçicilerin ve regex eşleşmelerinin değerini almanın ve bunları
href'yi

Yanıtlar:


1831

kullanma

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

tüm köprülerin href değerini Google'ı gösterecek şekilde değiştirir. Muhtemelen biraz daha rafine bir seçici istersiniz. Örneğin, bağlantı kaynağı (köprü) ve bağlantı hedefi ("bağlantı" olarak da bilinir) bağlantı etiketleri bir karışımınız varsa:

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

... O zaman muhtemelen hrefonlara yanlışlıkla özellikler eklemek istemezsiniz . Güvenlik için, seçicimizin yalnızca <a>mevcut bir hrefözelliğe sahip etiketlerle eşleşeceğini belirtebiliriz :

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

Elbette, aklınızda daha ilginç bir şey olacak. Bir çapayı mevcut belirli biriyle eşleştirmek istiyorsanız href, aşağıdakine benzer bir şey kullanabilirsiniz:

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

Bu href, dizeyle tam olarak eşleşen bağlantıları bulur http://www.google.com/. Daha ilgili bir görev eşleşiyor olabilir, ardından aşağıdakilerin yalnızca bir kısmını güncelleyebilir href:

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

Href nerede ilk bölümü seçer yalnızca bağlar başlar ile http://stackoverflow.com. Daha sonra, URL'nin bu kısmını yenisiyle değiştirmek için basit bir normal ifade kullanan bir işlev tanımlanır. Bunun size sağladığı esnekliğe dikkat edin - bağlantıda her türlü değişiklik burada yapılabilir.


3
"HTML'de öğe adları büyük / küçük harfe duyarlı değildir, ancak XML'de büyük / küçük harfe duyarlıdır." - w3.org/TR/CSS21/selector.html
göz kapaksızlığı

47
Tamlık için, bu hala ara sıra bağlı olduğu için, jQuery 1.4'ten bu yana, son örneğin kullanılması gerekmediğini ekleyeceğim each- aşağıdakiler artık mümkün olacaktır:$(selector).attr('href', function() { return this.replace(/.../, '...'); });
David Hedlund

14
@DavidHedlund Hafif düzeltme: kaçırdınız href: ...return this.href.replace(/.../, '...'); });
Armstrongest

280

JQuery 1.6 ve üstü ile şunları kullanmalısınız:

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

Arasındaki fark propve attrolmasıdır attroysa HTML niteliğini kapar propkapmak DOM özelliği.

Bu yayında daha fazla ayrıntı bulabilirsiniz: .prop () vs .attr ()


32
Kullanmak neden bir açıklama propüzerinde attrinsanlar soruya geliyor ve bulmak için, mutluluk duyacağız attr... görünüşte yeni jQuery sürümleri tamamen normal çalışma
womble

11
@womble using prop, attrHTML'yi değiştirmek yerine dom'u güncellediği için daha hızlıdır . jsfiddle.net/je4G5
Popnoodles

2
@Popnoodles Bundan daha fazla sorun var, ama hepsini burada açıklamak çok uzun olurdu. Bu yüzden okuyucular bağlanan post womble'a bir göz atmalıdır. Ancak, burada bir özet güzel olurdu, aksi takdirde bu bilgi biraz kaybolur ..
Rauni Lillemets

78

Aradığınızda attryöntemi kullanın . Herhangi bir özelliği yeni bir değerle kapatabilirsiniz.

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

2
Bir etikette class = "mylink" ayarladıysam bu benim için çalıştı. Sadece herhangi bir kimse yukarıdaki cevaba benzer name = "mylink" ayarlamaya ve çalışmasını beklemek durumunda açıklığa kavuşturmak istedim.
cpuguru

40

Başka bir şeye ait tüm özdeş bağlantıları değiştirmek isteyip istemediğinize veya yalnızca sayfanın belirli bir bölümündeki veya her birinin ayrı ayrı olanları üzerinde kontrol sahibi olmak isteyip istemediğinize bağlı olarak, bunlardan birini yapabilirsiniz.

Tüm Google bağlantılarını Google Haritalar'ı gösterecek şekilde değiştirin:

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

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

Belirli bir bölümdeki bağlantıları değiştirmek için, kapsayıcı div sınıfını seçiciye ekleyin. Bu örnek, içerikteki Google bağlantısını değiştirecek ancak altbilgide değişmeyecektir:

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

Belgede nerede olurlarsa olsunlar tek tek bağlantıları değiştirmek için, bağlantıya bir kimlik ekleyin ve ardından bu kimliği seçiciye ekleyin. Bu örnek, içerikteki ikinci Google bağlantısını değiştirecek, ancak altbilgideki ilk veya birinciyi değiştirmeyecektir:

<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

OP açıkça bir jQuery cevabı istemesine rağmen, bu günlerde her şey için jQuery kullanmanıza gerek yok.

JQuery olmadan birkaç yöntem:

  • Eğer değiştirmek istiyorsanız hrefdeğerini tüm <a> unsurları aracılığıyla tüm ve sonra yinelemeyi onları seçin nodelist : (örnek)

    var anchors = document.querySelectorAll('a');
    Array.prototype.forEach.call(anchors, function (element, index) {
        element.href = "http://stackoverflow.com";
    });
  • Gerçekten bir özniteliği hrefolan tüm <a>öğelerin değerini değiştirmek istiyorsanız href, [href]öznitelik seçicisini ( a[href]) ekleyerek bunları seçin : (örnek)

    var anchors = document.querySelectorAll('a[href]');
    Array.prototype.forEach.call(anchors, function (element, index) {
        element.href = "http://stackoverflow.com";
    });
  • Örneğin , belirli bir değer içeren öğelerin hrefdeğerini değiştirmek istiyorsanız , öznitelik seçiciyi kullanın : (örnek)<a>google.coma[href*="google.com"]

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

    Benzer şekilde, diğer özellik seçicileri de kullanabilirsiniz . Örneğin:

    • a[href$=".png"]değeri ile biten <a>öğeleri seçmek için kullanılabilir .href.png

    • a[href^="https://"]seçmek için kullanılabilecek <a>olan unsurları hrefdeğerlere öneki ile https://.

  • Birden çok koşulu karşılayan öğelerin hrefdeğerini değiştirmek istiyorsanız <a>: (örnek)

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

Çoğu durumda normal ifadeye gerek yoktur .


9

Bu snippet, 'menu_link' sınıfının bir bağlantısı tıklatıldığında çağrılır ve bağlantının metni ve URL'si gösterilir. Return false, bağlantının izlenmesini önler.

<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
Ben aşağı oy hakkında çok bilgiç değilim, ama neden aşağı oy kullandığınızı söylemeyecekseniz, elde edilecek hiçbir şey yoktur ve rahatsız etmemelisiniz.
crafter

2
Snippet'iniz ve cevabınız orijinal soruya cevap vermediği ve snippet kullanılarak elde edilen bilgilerin neden yararlı olduğuna dair herhangi bir açıklama sunmadığı için aşağı oy verildi.
David Millar

5
Aşağı oylama bu bilgiçliktir. Yanıtını diğer kullanıcıların yaptığı kadar fazla çaba göstermemiş olabilir, ancak gerçekten sorunu çözmek için kod sağlamıştır. OP'nin özel yapım bir çözümü kopyalamanın ve yapıştırmanın yanı sıra biraz daha düşünmek gerekiyor.
Ulises

8

Bunu yapmanın basit yolu:

Attr işlevi (jQuery sürüm 1.0'dan beri)

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

veya

Prop işlevi (jQuery sürüm 1.6'dan beri)

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

Ayrıca, yukarıdaki yolun avantajı, seçici tek bir bağlantı seçerse, yalnızca bu bağlantıyı güncelleyecek ve seçici bir bağlantı grubu döndürürse, belirli grubu yalnızca bir deyimle güncelleyecektir.

Şimdi, tam çapayı veya çapa grubunu tanımlamanın birçok yolu var:

Oldukça Basit Olanlar:

  1. Etiket adıyla bağlantı seçin: $("a")
  2. Dizinden çapa seçin: $("a:eq(0)")
  3. Belirli sınıflar için çapa seçin (bu sınıfta olduğu gibi yalnızca sınıflı çapalar active ):$("a.active")
  4. Belirli bir kimliğe sahip bağlantıların seçilmesi (burada örnek olarak) profileLink kimliğinde):$("a#proileLink")
  5. İlk çapa href'in seçilmesi: $("a:first")

Daha faydalı olanlar:

  1. Href özelliğine sahip tüm öğeleri seçme: $("[href]")
  2. Belirli href ile tüm çapaları seçme: $("a[href='www.stackoverflow.com']")
  3. Belirli bir href içermeyen tüm çapaların seçilmesi: $("a[href!='www.stackoverflow.com']")
  4. Belirli bir URL içeren href içeren tüm bağlantıların seçilmesi: $("a[href*='www.stackoverflow.com']")
  5. Belirli bir URL ile başlayan href ile tüm çapaları seçme: $("a[href^='www.stackoverflow.com']")
  6. Belirli bir URL ile biten href içeren tüm çapaları seçme: $("a[href$='www.stackoverflow.com']")

Şimdi, belirli URL'leri değiştirmek istiyorsanız, bunu şu şekilde yapabilirsiniz:

Örneğin, google.com'a gidecek tüm URL'ler için proxy web sitesi eklemek istiyorsanız, aşağıdaki gibi uygulayabilirsiniz:

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

Wordpress Avada Theme Logo Resim HREF'ini değiştirme

ShortCode Exec PHP eklentisini kurarsanız, myjavascript olarak adlandırdığım bu Kısa Kodu oluşturabilirsiniz

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

Artık Görünüm / Pencere Öğeleri'ne gidip altbilgi pencere öğesi alanlarından birini seçebilir ve aşağıdaki kısa kodu eklemek için bir metin pencere öğesi kullanabilirsiniz

[myjavascript]

Seçici, kullandığınız görüntüye ve retinaya hazır olup olmadığına bağlı olarak değişebilir, ancak her zaman geliştirici araçlarını kullanarak anlayabilirsiniz.


2

href bir özellikte, bu yüzden saf JavaScript kullanarak değiştirebilirsiniz, ancak sayfanıza zaten jQuery enjekte edildiyse, endişelenmeyin, her iki şekilde de göstereceğim:

hrefAşağıdakilere sahip olduğunuzu düşünün :

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

Ve bağlantıyı değiştirmek istiyorsun ...

Herhangi bir kütüphane olmadan saf JavaScript kullanarak şunları yapabilirsiniz:

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

Ama ayrıca jQuery'de şunları yapabilirsiniz:

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

veya

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

Bu durumda, zaten jQuery enjekte varsa, muhtemelen jQuery bir daha kısa ve daha çapraz tarayıcı bakmak ... ama bunun dışında ben ile gitmek JS...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.