219 votes

querySelector, correspondance d'élément générique ?

Existe-t-il un moyen de faire correspondre un nom d'élément générique en utilisant querySelector ou querySelectorAll ?

Le document XML que j'essaie d'analyser est essentiellement une liste plate de propriétés

  • J'ai besoin de trouver des éléments qui ont certaines chaînes dans leurs noms.
  • Je vois la prise en charge des caractères génériques dans les requêtes d'attributs, mais pas pour les éléments eux-mêmes.

Toute solution, à l'exception du retour à l'utilisation de XPath apparemment obsolète (IE9 l'a abandonné) est acceptable.

14voto

Lo Sauer Points 5469

Définissez le tagName en tant qu'attribut explicite :

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

J'en avais besoin moi-même, pour un document XML, avec des balises imbriquées se terminant par _Sequence . Voir la réponse de JaredMcAteer pour plus de détails.

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

Je n'ai pas dit que ce serait joli :) PS : je recommanderais d'utiliser tag_name sur tagName, afin de ne pas rencontrer d'interférences lors de la lecture des attributs DOM implicites « générés par l'ordinateur ».

11voto

cruzanmo Points 91

Je viens d'écrire ce court script ; semble fonctionner.

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

-2voto

Steve Lloyd Points 173

Il y a un moyen de dire ce qui n'est pas. Faites simplement du non quelque chose qu'il ne sera jamais. Une bonne référence de sélecteur css : https://www.w3schools.com/cssref/css_selectors.asp qui affiche le sélecteur :not comme suit :

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

Voici un exemple : un div suivi de quelque chose (tout sauf az tag)

 div > :not(z){
 border:1px solid pink;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X