194 votes

Sélecteur jQuery pour les entrées avec des crochets dans l'attribut de nom

J'essaie de sélectionner cet élément dont l'attribut name comporte des crochets :

<input type="text" name="inputName[]" value="someValue">

J'ai essayé ceci (qui ne fonctionne pas) :

$('input[inputName[]=someValue]')

et ceci non plus :

$('input[inputName&#91;&#93;=someValue]')

ou ceci :

$('input["inputName[]"=someValue]')

EDIT : Comme certains d'entre vous l'ont souligné, $('input[inputName=someValue]') ne fonctionnerait jamais. Ce que j'essayais de faire était : $('input[name=inputName][value=someValue]') . (Mais avec [] dans l'attribut name).

282voto

Dancrumb Points 11918

Par le Documentation sur jQuery essayez ceci :

$('input[inputName\\[\\]=someValue]')

[EDIT] Cependant, je ne suis pas sûr que ce soit la bonne syntaxe pour votre sélecteur. Vous voulez probablement :

$('input[name="inputName[]"][value="someValue"]')

34 votes

Bonne prise. La raison pour laquelle il faut deux barres obliques inversées est qu'une seule barre oblique inversée est interprétée comme un caractère d'échappement de chaîne JavaScript. Il en faut donc deux pour spécifier une barre oblique inversée littérale, qui fournit le caractère d'échappement au sélecteur... ah, les joies de plusieurs niveaux d'échappement de caractères.

0 votes

Merci pour cela. Il s'agit simplement d'utiliser des expressions régulières. C'est très utile pour soumettre les données du formulaire directement à un tableau ou à une liste dans votre framework de vue préféré. Cela m'a également aidé à répondre à la question sur la suppression d'objets avec plusieurs éléments de clé primaire ;)

84voto

Pointy Points 172438

Vous pouvez utiliser le backslash pour citer des caractères "amusants" dans vos sélecteurs jQuery :

$('#input\\[23\\]')

Pour les valeurs d'attributs, vous pouvez utiliser des guillemets :

$('input[name="weirdName[23]"]')

Votre exemple me laisse un peu perplexe ; à quoi ressemble exactement votre HTML ? Où apparaît la chaîne "inputName", en particulier ?

modifier correction de la bogosité ; merci @Dancrumb

1 votes

Je ne suis pas en mesure de sélectionner (par coïncidence, une balise de sélection) <select name="foo[bar]"> en utilisant $('select[name=foo\\[bar\\]]') cependant je Je suis de le faire en utilisant $('select[name="foo[bar]"]) votre deuxième suggestion.

0 votes

Cette réponse devrait être en tête de liste. C'est le plus simple. J'ai changé les citations et ça a marché pour moi. Merci

54voto

Gumbo Points 279147

La syntaxe du sélecteur d'attributs est la suivante [name=value] donde name est le nom de l'attribut et value est la valeur de l'attribut.

Donc si vous voulez sélectionner tous les input avec l'attribut name ayant la valeur inputName[] :

$('input[name="inputName[]"]')

Et si vous voulez vérifier deux attributs (ici : name y value ) :

$('input[name="inputName[]"][value=someValue]')

7voto

Eric Kigathi Points 371

Si le sélecteur est contenu dans une variable, le code ci-dessous peut être utile :

selector_name = $this.attr('name');
//selector_name = users[0][first:name]

escaped_selector_name = selector_name.replace(/(:|\.|\[|\])/g,'\\$1');
//escaped_selector_name = users\\[0\\]\\[first\\:name\\]

Dans ce cas, nous faisons précéder tous les caractères spéciaux d'un double backslash.

1 votes

Selector.replace(/([|])/g,' \\\\ $1') ; a fonctionné un peu mieux pour moi car il ajoute les barres obliques échappées et produit deux barres obliques échappées, et non une seule...

0 votes

@Fydo n'oubliez pas que vous devez également échapper d'autres caractères, notamment les deux-points et les points.

2voto

Sarfraz Points 168484

Essayez ça :

$('input[name="inputName\\[\\]"]')

Vous devez échapper aux parenthèses [ ] en utilisant la barre oblique inversée.

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