querySelector, joker öğe eşleşiyor mu?


134

querySelectorVeya kullanarak bir joker öğe adı eşlemesi yapmanın bir yolu var mı querySelectorAll? Özellik sorgularında joker karakterler için destek görüyorum, ancak öğelerin kendileri için değil.

Ayrıştırmaya çalıştığım XML belgesi temelde düz bir özellik listesi ve adlarında belirli dizeler bulunan öğeleri bulmam gerekiyor.

Buna ihtiyacım olursa XML belgesinin muhtemelen yeniden yapılandırmaya ihtiyaç duyduğunun farkındayım ama bu olmayacak.

Görünüşe göre kullanımdan kaldırılmış XPath'ı kullanmaya geri dönmek dışında herhangi bir çözüm (IE9 onu bıraktı) kabul edilebilir.


"Ad" derken etiket adını mı kastediyorsunuz?
kennytm

1
@ JaredMcAteer'in cevabı bir cevap olarak kabul edilmeye çok değer. Düşünün lütfen.
RBT

Yanıtlar:


348

[id^='someId']ile başlayan tüm kimliklerle eşleşecek someId.

[id$='someId']ile biten tüm kimliklerle eşleşecek someId.

[id*='someId']içeren tüm kimliklerle eşleşecek someId.

nameÖzniteliği arıyorsanız, sadece yerine idkoyun name.

Öğenin etiket adından bahsediyorsanız, kullanmanın bir yolu olduğuna inanmıyorum querySelector


4
Teşekkürler, etiket adını kastetmiştim.
Erik Andersson

hmm document.querySelectorAll ("div. [id $ = 'foo']")
SuperUberDuper

4
Oradaki periyot muhtemelen karıştırıyor document.querySelectorAll("div[id$='foo']")IE8 sadece kısmi QSA desteğine sahip, bence sadece CSS2.1 seçicilerini destekliyorlar, bu yüzden bu seçiciler IE8'de çalışmayacak, ancak IE9 + çalışacak.
JaredMcAteer

Bu cevap hayatımı kurtardı! Teşekkür ederim!!
Menas

28

SorguSelector () içeren tek satırlıklarla uğraşıyordum ve buraya geldim ve OP sorusuna, etiket adlarını ve querySelector () kullanarak olası bir yanıt aldım, soruyu yanıtlamak için @JaredMcAteer'a kredilerle, diğer adıyla RegEx benzeri vanilya Javascript'teki querySelector () ile eşleşir

Aşağıdakilerin yararlı olacağını ve OP'nin veya diğer herkesin ihtiyaçlarına uygun olacağını ummak:

// basically, of before:
var youtubeDiv = document.querySelector('iframe[src="http://www.youtube.com/embed/Jk5lTqQzoKA"]')

// after     
var youtubeDiv = document.querySelector('iframe[src^="http://www.youtube.com"]');
// or even, for my needs
var youtubeDiv = document.querySelector('iframe[src*="youtube"]');

Sonra, örneğin src şeyler vb. Alabiliriz ...

console.log(youtubeDiv.src);
//> "http://www.youtube.com/embed/Jk5lTqQzoKA"
console.debug(youtubeDiv);
//> (...)

12

TagName öğesini açık bir öznitelik olarak ayarlayın:

for(var i=0,els=document.querySelectorAll('*'); i<els.length;
          els[i].setAttribute('tagName',els[i++].tagName) );

İç İçe Etiketler ile biten bir XML Belgesi için buna ihtiyacım vardı _Sequence. Daha fazla ayrıntı için JaredMcAteer yanıtına bakın.

document.querySelectorAll('[tagName$="_Sequence"]')

Güzel olacağını söylemedim :) Not: tag_nameover tagName kullanmanızı tavsiye ederim , böylece 'bilgisayar tarafından oluşturulan' örtük DOM özniteliklerini okurken parazitlerle karşılaşmazsınız.


8

Bu kısa senaryoyu henüz yazdım; işe yarıyor gibi görünüyor.

/**
 * Find all the elements with a tagName that matches.
 * @param {RegExp} regEx  regular expression to match against tagName
 * @returns {Array}       elements in the DOM that match
 */
function getAllTagMatches(regEx) {
  return Array.prototype.slice.call(document.querySelectorAll('*')).filter(function (el) { 
    return el.tagName.match(regEx);
  });
}
getAllTagMatches(/^di/i); // Returns an array of all elements that begin with "di", eg "div"

querySelectorAll tarafından döndürülen nesne, tüm tarayıcılarda filtreyi desteklemeyebilir (çünkü her zaman normal bir javascript dizisi değildir). Komut dosyası oluşturulmadan önce (komut dosyası dinamik olarak oluşturulmuşsa) veya koşul ifadelerini kullanarak üretim sırasında bu iddiayı kontrol ettiğinizden emin olun.
Dmitry

Çok güzel cevap ... Sorunumla ilgili bulduğum en yakın eşleşme buydu. Özel öğelerle çalışıyorum ve bunun gibi özellikler maalesef hala manuel çalışma.
codepleb

-1

Ne olmadığını söylemenin bir yolu var. Sadece asla olmayacak bir şey yap. İyi bir css seçici referansı: https://www.w3schools.com/cssref/css_selectors.asp : not seçicisini aşağıdaki gibi gösterir:

:not(selector)  :not(p) Selects every element that is not a <p> element

İşte bir örnek: bir div ve ardından bir şey (az etiketi dışında herhangi bir şey)

div > :not(z){
 border:1px solid pink;
}
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.