Selettore jQuery per input con parentesi quadre nell'attributo name


180

Sto cercando di selezionare questo elemento con parentesi quadre nell'attributo name:

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

Ho provato questo (che non funziona):

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

e nemmeno questo:

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

o questo:

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

EDIT: Come alcuni di voi hanno sottolineato, $('input[inputName=someValue]')non avrebbe mai funzionato. Quello che stavo cercando di fare era: $('input[name=inputName][value=someValue]'). (Ma con []l'attributo name).

Risposte:


263

Per la documentazione di jQuery , prova questo:

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

[EDIT] Tuttavia, non sono sicuro che sia la sintassi giusta per il tuo selettore. Probabilmente vuoi:

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

32
Buona pesca. Il motivo per cui sono necessarie due barre rovesciate è perché una singola barra rovesciata viene interpretata come un carattere di escape della stringa JavaScript, quindi è necessario due per specificare una barra rovesciata letterale, che fornisce il carattere di escape al selettore ... ah, le gioie di più livelli di carattere fuga.
— Peter

Grazie per questo. Si tratta solo di usare espressioni regolari. Ciò è molto utile quando si inviano i dati dei moduli direttamente a un array o a un elenco all'interno del proprio framework di viste preferito. Ciò mi ha anche aiutato a rispondere alla domanda sull'eliminazione di oggetti con più elementi chiave primari. ;)
— Luiz Feijão Veronesi,

79

Puoi usare la barra rovesciata per citare personaggi "divertenti" nei selettori jQuery:

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

Per i valori degli attributi, puoi usare le virgolette:

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

Ora, sono un po 'confuso dal tuo esempio; che aspetto ha esattamente il tuo HTML? Dove viene visualizzata la stringa "inputName", in particolare?

modifica bogosity fisso; grazie @Dancrumb


1
Non sono in grado di selezionare (per coincidenza un tag di selezione) <select name="foo[bar]">utilizzando, $('select[name=foo\\[bar\\]]')tuttavia sono in grado di farlo utilizzando $('select[name="foo[bar]"]), secondo suggerimento.
— Frank Nocke,

53

La sintassi del selettore di attributo è [name=value]dove si nametrova il nome dell'attributo e valueil valore dell'attributo.

Quindi, se si desidera selezionare tutti gli inputelementi con l'attributo namecon il valore inputName[]:

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

E se vuoi controllare due attributi (qui: namee value):

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

7

Se il selettore è contenuto in una variabile, il seguente codice può essere 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\\]

In questo caso aggiungiamo il prefisso a tutti i caratteri speciali con doppia barra rovesciata.


1
selector.replace (/ ([|]) / g, '\\\\ $ 1'); ha funzionato un po 'meglio per me perché aggiunge le barre sfuggite e produce due, non una barra di fuga ...
— Fydo,

@Fydo ricorda solo che devi scappare anche da alcuni altri personaggi tra cui due punti, punti e periodi
— Eric Kigathi,

1

Basta separarlo con diverse virgolette:

<input name="myName[1][data]" value="myValue">

JQuery:

var value = $('input[name="myName[1][data]"]').val();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.