web-dev-qa-db-fra.com

jQuery match regex

var playerClass = $(this).parent().attr('class')

Question sur la sélection d'une classe spécifique à partir du dom.

Que puis-je ajouter à cette ligne pour ne sélectionner que la classe qui a une classe de joueur-1, joueur-2, essentiellement n'importe quoi avec un préfixe de joueur suivi d'un nombre?

18
Greg

Je ne pouvais pas dire exactement ce que vous demandiez avec votre question, alors voici quatre possibilités. J'espère que l'un de ces correspond à ce que vous aviez l'intention de demander ou vous pouvez modifier légèrement l'un d'eux pour l'adapter.

Pour sélectionner tous les éléments d'entrée avec une classe de player-xxxx est un nombre, vous pouvez procéder comme suit:

var playerClass = $('input[class^="player-"]').filter(function() {
    return((" " + this.className + " ").match(/\splayer-\d+\s/) != null);
});

Le premier sélecteur jQuery obtient n'importe quel nom de classe commençant par "player-". Le filtre élimine ensuite les éléments qui ne sont pas également "player-nn".

Si vous essayez uniquement d'examiner si un nom de classe particulier contient player-nn, vous pouvez le faire comme ceci:

if ((" " + $(this).parent().attr('class') + " ").match(/\splayer-\d+\s/) != null) {
    // the parent has player-nn as a class
}

Si vous voulez juste obtenir la classe correspondante sur le parent, vous pouvez le faire avec ceci:

var matches = (" " + $(this).parent().attr('class') + " ").match(/\s(player-\d+)\s/);
if (matches) {
    playerClass = matches[1];
}

Si vous essayez d'obtenir le numéro après le player-, procédez comme suit:

var matches = (" " + $(this).parent().attr('class') + " ").match(/\splayer-(\d+)\s/);
if (matches) {
    playerNum = parseInt(matches[1], 10);
}

Remarque: Tous ces exemples utilisent une astuce (que j’ai apprise de jQuery): si vous ajoutez un espace au début et à la fin du nom de classe général, vous pouvez alors rechercher un nom de classe donné avec une expression rationnelle en recherchant votre nom de classe particulier. des deux côtés par des espaces. Cela garantit que vous ne correspondez pas à une partie d'un nom de classe plus long et uniquement à des noms de classe entiers. jQuery utilise cette astuce dans son implémentation .hasClass().

43
jfriend00

Je pense que c'est ce dont vous avez besoin:

var playerClass = $(this).parent().attr('class').match(/player-\d+/);
5
elclanrs

Pour sélectionner tous les éléments input ayant un nom de classe commençant par "player-", vous pouvez utiliser ceci:

var playerClass = $('input[class^="player-"]');

Le sélecteur "starts-with" est décrit ici: http://api.jquery.com/attribute-starts-with-selector/

Cela ne garantira pas que "joueur" soit immédiatement suivi d'un chiffre.

2
Marc

Vous pouvez utiliser le sélecteur jQuery regex:

0
icyrock.com