2012-01-03 6 views
52

¿Hay alguna manera de hacer una coincidencia de nombre de elemento comodín usando querySelector o querySelectorAll? Veo soporte para comodines en consultas de atributos pero no para los elementos mismos.querySelector, coincidencia de elemento comodín?

El documento XML que intento analizar es básicamente una lista plana de propiedades y necesito encontrar elementos que tengan ciertas cadenas en sus nombres.

Me doy cuenta de que el documento XML probablemente necesite una reestructuración si lo necesito, pero eso no va a suceder.

Cualquier solución, excepto volver a usar el XPath aparentemente obsoleto (IE9 cayó) es aceptable.

+0

Por "nombre" ¿te refieres al nombre de la etiqueta? – kennytm

+1

Desafortunadamente sí –

+0

@ La respuesta de JaredMcAteer es muy digna de ser aceptada como una respuesta. Por favor considera. – RBT

Respuesta

144

[id^='someId'] coincidirá con todos los identificadores que comienzan con someId.

[id$='someId'] coincidirá con todos los identificadores que terminan en someId.

[id*='someId'] coincidirá con todos los identificadores que contienen someId.

Si está buscando el atributo name simplemente sustituya id con name.

Si estamos hablando del nombre de la etiqueta del elemento no creo que hay una manera de utilizar querySelector

+3

Gracias, quise decir el nombre de la etiqueta. –

+0

es este ie8 + ??? – SuperUberDuper

+0

hmm No puedo hacer document.querySelectorAll ("div. [Id $ = 'foo']") – SuperUberDuper

5

Establecer la tagName como un atributo explícito:

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

que necesitaba esto mismo , para un documento XML, con etiquetas anidadas que terminan en _Sequence. Consulte JaredMcAteer para obtener más detalles.

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

No he dicho que sería bastante :) PS: Yo recomendaría utilizar tag_name sobre tagName, por lo que no se opongan a las interferencias cuando se lee 'generada por ordenador', atributos implícita DOM.

4

me estaba metiendo/reflexionando sobre algunas frases que implican querySelector() & terminado aquí, & tienen una posible respuesta a la pregunta OP utilizando nombres de las etiquetas & querySelector(), con créditos a @JaredMcAteer por responder a mi pregunta, también conocido como tienen partidos RegEx-como con querySelector() de JavaScript básico

esperando que el siguiente será útil & satisfacer las necesidades de la OP o de todos los demás:

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

Entonces, podemos, por ejemplo, conseguir las cosas src , etc ...

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

+

-7

Esto funciona para mí:

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

mostrar todos los nombres que termina un poco con "057".

+0

¿Qué lenguaje de programación es ese ?! Esta es una pregunta ** JavaScript ** –

+0

Este es el Objetivo C, no JavaScript – vonox7

1

Acabo de escribir este breve guión; parece funcionar.

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