javascript - name - queryselector vs getelementbyid
querySelector, coincidencia de elemento comodÃn? (5)
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"
¿Hay alguna forma de hacer coincidir un nombre de elemento comodín con querySelector
o querySelectorAll
? Veo soporte para comodines en consultas de atributos pero no para los elementos mismos.
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 lo descarta) es aceptable.
Establezca tagName como un atributo explícito:
for(var i=0,els=document.querySelectorAll(''*''); i<els.length;
els[i].setAttribute(''tagName'',els[i++].tagName) );
Lo necesitaba yo mismo, para un documento XML, con etiquetas anidadas que terminan en _Sequence
. Vea la respuesta de JaredMcAteer para más detalles.
document.querySelectorAll(''[tagName$="_Sequence"]'')
No dije que sería bonito :) PD: recomendaría usar tag_name
sobre tagName, para que no se tag_name
con interferencias cuando se leen los atributos DOM ''generados por computadora''.
Esto funciona para mí:
NSString *nameInWeb = [NSMutableString stringWithFormat:@"document.querySelector(''[name$=/"057/"]'').name"];
Muestra todos los nombres que terminan con "057".
Estuve jugando / meditando sobre one-liners que implican querySelector () y terminé aquí, y tengo una posible respuesta a la pregunta de OP usando nombres de etiquetas y querySelector (), con créditos a @JaredMcAteer para responder MI pregunta, también tengo RegEx-like coincide con querySelector () en vainilla Javascript
Esperando que lo siguiente sea útil y se ajuste a las necesidades del OP o al de 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, obtener las cosas src, etc.
console.log(youtubeDiv.src);
//> "http://www.youtube.com/embed/Jk5lTqQzoKA"
console.debug(youtubeDiv);
//> (...)
+
[id^=''someId'']
coincidirá con todos los someId
comiencen con someId
.
[id$=''someId'']
coincidirá con todos los identificadores que terminan con someId
.
[id*=''someId'']
coincidirá con todos los someId
contengan someId
.
Si está buscando el atributo de name
simplemente sustituya el id
con el name
.
Si está hablando sobre el nombre de la etiqueta del elemento, no creo que haya una forma de usar querySelector