2012-01-03 11 views
52

Czy istnieje sposób na dopasowanie nazwy elementu wieloznacznego przy użyciu querySelector lub querySelectorAll? Widzę obsługę symboli wieloznacznych w zapytaniach atrybutów, ale nie dla samych elementów.querySelector, element wieloznaczny pasuje do siebie?

Dokument XML, który próbuję przeanalizować, to w zasadzie płaska lista właściwości i muszę znaleźć elementy, które mają określone ciągi znaków w swoich nazwach.

Zdaję sobie sprawę, że dokument XML prawdopodobnie wymaga restrukturyzacji, jeśli tego potrzebuję, ale to się po prostu nie wydarzy.

Każde rozwiązanie z wyjątkiem powrotu do użycia najwyraźniej przestarzałego XPath (IE9 upuszczonego go) jest dopuszczalne.

+0

Przez "nazwa" rozumiesz nazwę tagu? – kennytm

+1

Niestety tak –

+0

@ Odpowiedź JaredMcAteer jest bardzo godna otrzymania akceptacji jako odpowiedź. Proszę wziąć pod uwagę. – RBT

Odpowiedz

144

[id^='someId'] dopasuje wszystkie identyfikatory zaczynające się od someId.

[id$='someId'] dopasuje wszystkie identyfikatory kończące się na someId.

[id*='someId'] dopasuje wszystkie identyfikatory zawierające someId.

Jeśli szukasz atrybutu name, po prostu zamień id na name.

Jeśli mówisz o nazwie znacznika elementu I nie wierzę, że jest to sposób korzystania querySelector

+3

Dzięki, miałem na myśli nazwę tagu. –

+0

to jest ie8 + ??? – SuperUberDuper

+0

hmm Nie mogę zrobić document.querySelectorAll ("div. [Id $ = 'foo']") – SuperUberDuper

5

Ustaw zmiennej jako wyraźnego atrybut:

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

Musiałem to sam dla dokumentu XML z zagnieżdżonymi tagami kończącymi się na _Sequence. Aby uzyskać więcej informacji, zobacz odpowiedź JaredMcAteer.

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

Nie powiedziałem byłoby całkiem :) PS: Polecam używać tag_name nad zmiennej, więc nie napotkasz zakłóceń podczas czytania „generowany komputerowo”, ukryte atrybuty DOM.

4

byłem brudząc/zadumanie na jednej wkładki udziałem querySelector() & skończyło się tutaj, & mieć możliwą odpowiedź na pytanie OP używając nazw znaczników & querySelector(), z kredytów do @JaredMcAteer za odpowiedzi na moje pytanie, aka mają RegEx-jak mecze z querySelector() w waniliowym JavaScript

Licząc dodaje będzie przydatna & dopasować potrzeby pO lub każdy inny:

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

Następnie możemy, na przykład, dostać rzeczy src , itd ...

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

+

-7

Działa to dla mnie:

NSString *nameInWeb = [NSMutableString stringWithFormat:@"document.querySelector('[name$=\"057\"]').name"]; 

Pokaż wszystkie imiona kończące pokojowe "blankietach 057".

+0

Jaki to jest język programowania ?! To jest ** JavaScript ** pytanie –

+0

To jest C, a nie JavaScript – vonox7

1

Właśnie napisałem ten krótki skrypt; wydaje się działać.

/** 
* 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" 
Powiązane problemy