Seletor jQuery para entradas com colchetes no atributo name

179

Estou tentando selecionar este elemento que possui colchetes no atributo name:

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

Eu tentei isso (o que não funciona):

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

e nem isso:

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

ou isto:

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

EDIT: Como alguns de vocês apontaram, $('input[inputName=someValue]')nunca funcionaria. O que eu estava tentando fazer era: $('input[name=inputName][value=someValue]'). (Mas com []no atributo name).

aidan
fonte

Respostas:

262

De acordo com a documentação do jQuery , tente o seguinte:

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

[EDIT] No entanto, não tenho certeza se essa é a sintaxe certa para o seu seletor. Você provavelmente quer:

$('input[name="inputName[]"][value="someValue"]')
Dancrumb
fonte
32
Boa pegada. O motivo para precisar de duas barras invertidas é porque uma única barra invertida é interpretada como um caractere de escape de string JavaScript, então você precisa de dois para especificar uma barra invertida literal, que fornece o caractere de escape ao seletor ... ah, as alegrias de vários níveis de caracteres escapando.
Peter
Obrigado por isso. É apenas uma questão de usar expressões regulares. Isso é muito útil ao enviar dados de formulário diretamente para uma matriz ou lista dentro de sua estrutura de exibição favorita. Isso também me ajudou a responder à pergunta sobre a exclusão de objetos com vários elementos de chave primária. ;)
Luiz Feijão Veronesi 23/10
79

Você pode usar barra invertida para citar caracteres "engraçados" nos seletores do jQuery:

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

Para valores de atributo, você pode usar aspas:

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

Agora, estou um pouco confuso com o seu exemplo; como é exatamente o seu HTML? Onde a string "inputName" aparece, em particular?

editar bogosidade fixa; obrigado @Dancrumb

Pontudo
fonte
1
Eu não sou capaz de selecionar (coincidentemente um seleto tag) <select name="foo[bar]">usando $('select[name=foo\\[bar\\]]')porém eu sou capaz de fazê-lo usando $('select[name="foo[bar]"]), você segunda sugestão.
precisa saber é o seguinte
53

A sintaxe do seletor de atributos é [name=value]onde nameestá o nome do atributo e valueé o valor do atributo.

Portanto, se você deseja selecionar todos os inputelementos com o atributo namecom o valor inputName[]:

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

E se você deseja procurar por dois atributos (aqui: namee value):

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

Se o seletor estiver contido em uma variável, o código abaixo pode ser útil:

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\\]

Nesse caso, prefixamos todos os caracteres especiais com barra invertida dupla.

Eric Kigathi
fonte
1
selector.replace (/ ([|]) / g, '\\\\ $ 1'); trabalhou um pouco melhor para mim, porque ele adiciona as barras escaparam e produz dois, não um fuga barra ...
Fydo
@Fydo lembre-se de que você também precisa escapar de alguns outros personagens, incluindo dois pontos, pontos também #
Eric Kigathi 28/11/14
1

Basta separá-lo com aspas diferentes:

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

JQuery:

var value = $('input[name="myName[1][data]"]').val();
slva2000
fonte