2012-01-03 7 views
52

C'è un modo per far corrispondere un nome elemento jolly utilizzando querySelector o querySelectorAll? Vedo supporto per i caratteri jolly nelle query degli attributi ma non per gli elementi stessi.querySelector, corrispondenza elemento jolly?

Il documento XML che sto cercando di analizzare è fondamentalmente un elenco di proprietà e ho bisogno di trovare elementi che hanno determinate stringhe nel loro nome.

Mi rendo conto che il documento XML ha probabilmente bisogno di una ristrutturazione se ho bisogno di questo, ma questo non accadrà.

Qualsiasi soluzione, tranne tornare a utilizzare XPath apparentemente deprecato (IE9 rilasciato) è accettabile.

+0

Per "nome" si intende il nome del tag? – kennytm

+1

Purtroppo sì –

+0

@ La risposta di JaredMcAteer è molto degna di essere accettata come risposta. Si prega di prendere in considerazione. – RBT

risposta

144

[id^='someId'] corrisponderà a tutti gli ID a partire da someId.

[id$='someId'] corrisponderà a tutti gli ID che terminano con someId.

[id*='someId'] corrisponderà a tutti gli ID contenenti someId.

Se si sta cercando l'attributo name, è sufficiente sostituire id con name.

Se si sta parlando del nome del tag dell'elemento non credo ci sia un modo utilizzando querySelector

+3

Grazie, intendevo il nome del tag. –

+0

è questo ie8 + ??? – SuperUberDuper

+0

hmm Non riesco a fare document.querySelectorAll ("div. [Id $ = 'foo']") – SuperUberDuper

5

Impostare la tagName come un attributo esplicito:

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

avevo bisogno io stesso , per un documento XML, con tag annidati che termina con _Sequence. Vedi JaredMcAteer risposta per maggiori dettagli.

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

Non ho detto che sarebbe stato abbastanza :) PS: mi sento di raccomandare di utilizzare tag_name sopra tagName, in modo da non incorrere in interferenze durante la lettura 'generato dal computer', attributi implicita DOM.

4

avrei dovuto vedermela/meditando sul one-liners che coinvolgono querySelector() & finito qui, & hanno una possibile risposta alla domanda OP usando nomi di tag & querySelector(), con crediti per @JaredMcAteer per rispondere alla mia domanda, in arte avere partite RegEx-come con querySelector() in vaniglia Javascript

Sperando di seguito sarà utile & soddisfare le esigenze del OP o di tutti gli altri:

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

Poi, siamo in grado, ad esempio, ottenere la roba src , ecc ...

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

+

-7

questo funziona per me:

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

Mostra tutti i nomi che termina whith "057".

+0

Che linguaggio di programmazione è ?! Questa è una domanda ** JavaScript ** –

+0

Questo è l'obiettivo C, non JavaScript – vonox7

1

Ho appena scritto questa breve sceneggiatura; sembra funzionare.

/** 
* 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"