JavaScript kullanarak bir bağlantıya dinamik olarak "href" özelliğini nasıl ekleyebilirim?


95

hrefJavaScript kullanarak bir bağlantıya özniteliği dinamik olarak nasıl ekleyebilirim ?

Temel hrefolarak <a></a>dinamik olarak bir öznitelik eklemek istiyorum (yani, kullanıcı web sitesindeki belirli bir resmi tıkladığında).

Yani:

<a>Link</a>

Gitmem gerek:

<a href="somelink url">Link</a>

Yanıtlar:


166
var a = document.getElementById('yourlinkId'); //or grab it by tagname etc
a.href = "somelink url"

İlginç. Özniteliklere alan olarak doğrudan erişebileceğinizi bilmiyordum (aşağıdaki çözümümle karşılaştırın setAttribute). Bu yaklaşımın standart olup olmadığını bilen var mı?
mgiuca

Bence bir DOM öğesinde href, doğrudan el.href ile ayarlayabileceğiniz bir özelliktir. Bunun yerine setAttribute (el, attr), belirli bir DOM öğesine bazı özel öznitelikler eklemek için kullanılır, bu nedenle bu durumda bir std ayarlamak için onu kullanmaya gerek yoktur. attr
stecb

Ama her iki yol da doğru mu? Cevabı eleştirmeye çalışmamak - pekala doğru olabilir. Ancak web'de sizin için işe yarayan bir şey almak yeterli değildir. Tüm tarayıcılarda çalışması gerekiyor ve bu, standartları takip etmeniz gerektiği anlamına geliyor. FWIW, bu benim için de işe yarıyor (Firefox'ta), ancak aslında bunu yapmanın standart bir yolu olup olmadığını bilmekle ilgileniyorum. W3C DOM spesifikasyonu ( w3.org/TR/DOM-Level-2-Core/core.html ) bundan bahsetmiyor gibi görünüyor.
mgiuca

6
Bunlar, öğelerle daha kolay etkileşim kuran arayüzlerdir. Örnekler için, tüm bağlantılar, HTMLLinkElementgibi belirli alanların ayarlanmasını destekleyen tanımlanmış yöntemlere sahiptir href. Kullanmak zorunda kalmadan hangisini kullanabileceğinizi görmek için referansa bakmalısınız setAttribute. Başka bir örnek, oluşturmak ve tabloya eklemek zorunda kalmadan yeni satırlar eklemek için kullanabileceğiniz <table>öğedir ( HTMLTableElement ) . insertRow()<tr>
Tay

3
@mgiuca: Genel olarak HTML DOM'ları için, IE'de bozuk olan ve her zaman beklediğiniz şeyi yapmayan setAttribute()ve yerine özellikleri kullanmayı tercih etmelisiniz getAttribute(). Bkz stackoverflow.com/questions/4456231/...
Tim Aşağı

25

<a>Öğe için DOM nesnesini nasıl elde edeceğinizi bildiğinizi varsayıyorum (kullanım document.getElementByIdveya başka bir yöntem).

Herhangi bir öznitelik eklemek için, DOM nesnesinde setAttribute yöntemini kullanmanız yeterlidir :

a = document.getElementById(...);
a.setAttribute("href", "somelink url");

pal, setattribute öznitelikleri değiştirmek için oldukça standart değildir. Mevcut değerlere erişmek veya bunları değiştirmek için, özellikleri kullanmalısınız. Örneğin, elt.setAttribute ('değer', val) yerine elt.value kullanın. developer.mozilla.org/en/DOM/element.setAttribute#Notes
naveen

@naveen "En önemlisi XUL'da" yazıyor, muhtemelen bu değil. Başka hangi değerlere atıfta bulunduğundan emin değilim ("belirli özellikler" çok belirsizdir), ancak setAttributeaçıkça standarttır ( w3.org/TR/DOM-Level-2-Core/core.html#ID-F68F082 ), ve W3C, çalışmadığı herhangi bir özelliği tanımlamaz. Tersine, özelliği kullanmanın belirli öznitelik adları için başarısız olacağını garanti edebilirim. Gibi tagName, ve setAttribute- bunlar zaten Eleman arayüzünün alanları / yöntemleridir. Özniteliklerin özelliklerinden bahseden W3C belgesinde hiçbir yerde göremiyorum.
mgiuca

@mgiuca: Son yorumu gönderdikten sonra ilgili spesifikasyonu buldunuz. Mülklerin başarısız olması ve sonra bahsetmeniz hakkındaki düşüncenizi anlamıyorum tagName. Özel niteliklerden mi bahsediyorsunuz?
Tim Down

Demek istediğim, DOM (tarayıcıda uygulanmış olsa bile), yalnızca HTML değil, genel olarak XML ağaçlarıyla çalışmak için genel bir özelliktir. Rasgele XML öğeleriyle çalışırken, öznitelikleri güvenilir bir şekilde almanın ve ayarlamanın tek yolu getAttributeve setAttribute; "tagName"bir özellik olarak çalışamayan bir öznitelik örneğidir. Özellikleri yalnızca HTML ile çalışırken ve DOM HTML spesifikasyonunda tanımlanan belirli özellikler için, nitelikleri okumak ve atamak için kullanabilirsiniz.
mgiuca

Muhtemelen yanlış anlıyorum ama bu hala kafa karıştırıcı. tagName olduğu bir özelliği ElementHTML ve XML Doms hem JavaScript nesneler, ve üzerinden bir elementin etiket adı alınamıyor getAttribute("tagName")(gerçekleştirme aşamasında ait IE, haricinde getAttribute()ve setAttribute()tam ne dediğini tersini görünüyor bozuldu).
Tim Down

3

İlk olarak, değiştirmeyi deneyin <a>Link</a>için <span id=test><a>Link</a></span>.

Ardından, aradığınız javascript işlevine şuna benzer bir şey ekleyin:

var abc = 'somelink';
document.getElementById('test').innerHTML = '<a href="' + abc + '">Link</a>';

Bu şekilde bağlantı şöyle görünecek:

<a href="somelink">Link</a>

Selam. Stackoverflow'a hoş geldiniz. OP'nin sorusu href, var olan bir a etikete bir nasıl ekleneceği ile ilgili gibi görünüyor ( temelde <a> </a> dinamik olarak bir href niteliği eklemek istiyorum ). Ancak bu cevap nasıl açıklayan gibi görünüyor oluşturmak bir abir sahip etiketi href.
Moishe Lipsker

1
document.getElementById('link-id').href = "new-href";

Bunun eski bir gönderi olduğunu biliyorum, ama işte bazı insanlar için daha uygun olabilecek tek satırlık bir yazı.

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.