Bir özellik değerine dayalı olarak DOM'da bir öğe bulma


252

Belirtilen özellik adı ve özellik değerine sahip bir öğeyi arayan DOM API'si olup olmadığını söyleyebilir misiniz?

Gibi bir şey:

doc.findElementByAttribute("myAttribute", "aValue");

1
Bir Jquery Sol arıyorsanız çoğaltın: stackoverflow.com/questions/696968/…
Rajat

13
Modern çözüm olan Wojtek'in cevabının kabul edilen cevabını güncelleyebilir misiniz?
Nick Craver

Yanıtlar:


165

Güncelleme: Son birkaç yılda manzara büyük ölçüde değişti. Artık güvenilir bir şekilde kullanabilirsiniz querySelectorve bunu nasıl yapacağınıza dair Wojtek'in cevabınaquerySelectorAll bakınız .

Artık jQuery bağımlılığına gerek yok. JQuery kullanıyorsanız, harika ... değilseniz, artık yalnızca niteliklere göre öğeleri seçmek için ona güvenmeniz gerekmez.


Bunu vanilya javascriptinde yapmanın çok kısa bir yolu yok, ancak bazı çözümler var.

Böyle bir şey yaparsınız, öğeler arasında dolaşırsınız ve özelliği kontrol edersiniz

JQuery gibi bir kitaplık bir seçenekse , bunu biraz daha kolay yapabilirsiniz, şöyle:

$("[myAttribute=value]")

Değer geçerli bir CSS tanımlayıcısı değilse (içinde boşluklar veya noktalama işaretleri vb. Varsa), değer çevresinde tırnak işaretleri kullanmanız gerekir (bunlar tek veya çift olabilir):

$("[myAttribute='my value']")

Ayrıca yapabilirsiniz start-with, ends-with, contains, vb ... nitelik seçicinin için çeşitli seçenekler vardır .


6
Aslında vanilya JavaScript DOM API, modern tarayıcılarda oldukça iyi çalışıyor
Wojtek Kruszewski

2
@WojtekKruszewski 2010 yılında değil :) Yine de güncelledim, umarım asker bizim için kabulü taşıyacak - orada güncel bilgi istiyoruz.
Nick Craver

1
Ben jQuery (ya da eşdeğeri) muhtemelen ne gerektirir bilmek zorunda kalmadan özellikle çapraz tarayıcı uyumlu olmak için en kolay olduğunu düşünüyorum.
Alexis Wilke

1
Boş bir dizi almaya devam ediyorum! Bu d niteliği ile bir SVG kapmak çalışıyorum ve $ ("[d = yol]") deniyorum; Burada 'yol' ihtiyacım olan belirli d-niteliğini içeren bir değişkendir. Svv yolları ile bunu deneyen var mı?
tx291

439

Modern tarayıcılar querySelectorAllaşağıdakileri yapabilmeniz için yerel ayarları destekler :

document.querySelectorAll('[data-foo="value"]');

https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll

Tarayıcı uyumluluğu hakkında ayrıntılar:

JQuery'yi eski tarayıcıları (IE9 ve daha eski) desteklemek için kullanabilirsiniz:

$('[data-foo="value"]');

2
"modern" tanımı somutlaştırmak için: caniuse.com/#search=querySelectorAll
serhio

Görünüşe göre değer bir sayı olamaz ya daSyntaxError: An invalid or illegal string was specified
jeum

3
Seçici şöyle olmalıdır:'[data-foo="value"]'
Yotam Ömer

1
Performans hakkında herhangi bir notunuz var mı? Bu, tüm düğümlerde daha hızlı yineleniyor mu?
Stepan Yakovenko

1
"Data-foo" ... nedir ve bu örnekte 'myAttribute' nereye gitti?
oo_dev

38

DOM'da özellik seçiciyi document.querySelector()ve document.querySelectorAll()yöntemlerini kullanarak kullanabiliriz .

senin için:

document.querySelector("selector[myAttribute='aValue']");

ve şunu kullanarak querySlectorAll():

document.querySelectorAll("selector[myAttribute='aValue']");

Gelen querySelector()ve querySelectorAll()biz "CSS" in seçerken yöntemler biz nesneleri seçebilir.

Https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors adresindeki "CSS" özellik seçicileri hakkında daha fazla bilgi


Bu document.querySelectorAll ("selector [myAttribute = aValue]") gibi iç tırnak işaretlerini kaldırmak zorunda kaldım;
Matjaz Hirsman

20
FindByAttributeValue("Attribute-Name", "Attribute-Value");   

ps tam eleman türünü biliyorsanız, 3. parametreyi (yani div, a, p ...etc...) eklersiniz :

FindByAttributeValue("Attribute-Name", "Attribute-Value", "div");   

ancak ilk önce bu işlevi tanımlayın:

function FindByAttributeValue(attribute, value, element_type)    {
  element_type = element_type || "*";
  var All = document.getElementsByTagName(element_type);
  for (var i = 0; i < All.length; i++)       {
    if (All[i].getAttribute(attribute) == value) { return All[i]; }
  }
}

ps yorum başına öneriler güncellendi.


6
Neden ?! Bunu yaparak tüm DOM'nizi döngüye
Arthur

3
Bu harika görünüyor - sayfada yalnızca 5 öğeniz varsa.
sheriffderek

2
document.querySelectorAll('[data-foo="value"]');@Wojtek Kruszewski tarafından önerilen awnser tarafından önerildiği gibi.
Arthur

7

Aşağıda, bir belgedeki görüntüleri src özelliğine göre arama örneği verilmiştir:

document.querySelectorAll("img[src='https://pbs.twimg.com/profile_images/........jpg']");


0

Sorgu seçicileri kullanma, örnekler:

document.querySelectorAll(' input[name], [id|=view], [class~=button] ')

input[name]Özellikli öğeleri girer name.

[id|=view]İle başlayan kimliği olan öğeler view-.

[class~=button]buttonSınıf elemanları .

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.