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.