Selector jQuery para entradas con corchetes en el atributo de nombre

180

Estoy tratando de seleccionar este elemento que tiene corchetes en el atributo de nombre:

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

He intentado esto (que no funciona):

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

y tampoco esto:

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

o esto:

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

EDITAR: Como algunos de ustedes han señalado, $('input[inputName=someValue]')nunca funcionaría. Lo que estaba tratando de hacer era: $('input[name=inputName][value=someValue]'). (Pero con []el atributo de nombre).

aidan
fuente

Respuestas:

263

Según la documentación de jQuery , intente esto:

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

[EDITAR] Sin embargo, no estoy seguro de que esa sea la sintaxis correcta para su selector. Probablemente quieras:

$('input[name="inputName[]"][value="someValue"]')
Dancrumb
fuente
32
Buena atrapada. La razón por la que se necesitan dos barras invertidas se debe a que una barra invertida se interpreta como un carácter de escape de cadena de JavaScript, por lo que necesita dos para especificar una barra invertida literal, que proporciona el carácter de escape al selector ... ah, las alegrías de múltiples niveles de caracteres escapando
Peter
Gracias por eso. Es solo una cuestión de usar expresiones regulares. Esto es muy útil cuando envía datos de formulario directamente a una matriz o lista dentro de su marco de vista favorito. Eso también me ayudó a responder la pregunta sobre la eliminación de objetos con múltiples elementos clave principales. ;)
Luiz Feijão Veronesi
79

Puede usar la barra invertida para citar caracteres "divertidos" en sus selectores jQuery:

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

Para los valores de atributo, puede usar comillas:

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

Ahora, estoy un poco confundido por tu ejemplo; ¿Cómo es exactamente tu HTML? ¿Dónde aparece la cadena "inputName", en particular?

editar bogosity fijo; gracias @ Dancrumb

Puntiagudo
fuente
1
No soy capaz de seleccionar (casualmente una etiqueta de selección) <select name="foo[bar]">usando $('select[name=foo\\[bar\\]]')sin embargo yo soy capaz de hacerlo a través de $('select[name="foo[bar]"]), usted segunda sugerencia.
Frank Nocke
53

La sintaxis del selector de atributos es [name=value]donde nameestá el nombre del atributo y valueel valor del atributo.

Entonces, si desea seleccionar todos los inputelementos con el atributo que nametiene el valor inputName[]:

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

Y si desea verificar dos atributos (aquí: namey value):

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

Si el selector está contenido dentro de una variable, el siguiente código puede 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\\]

En este caso, prefijamos todos los caracteres especiales con doble barra diagonal inversa.

Eric Kigathi
fuente
1
selector.replace (/ ([|]) / g, '\\\\ $ 1'); funcionó un poco mejor para mí porque agrega las barras de escape y produce dos, no una barra de escape ...
Fydo 02 de
@Fydo solo recuerda que también debes escapar de algunos otros personajes, incluidos los dos puntos, los puntos también
Eric Kigathi
1

Solo sepáralo con diferentes citas:

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

JQuery:

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