jQuery-Selektor für Eingaben mit eckigen Klammern im Attribut name

179

Ich versuche, dieses Element auszuwählen, das im Namensattribut eckige Klammern hat:

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

Ich habe es versucht (was nicht funktioniert):

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

und das auch nicht:

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

oder dieses:

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

EDIT: Wie einige von Ihnen betont haben, $('input[inputName=someValue]')würde nie funktionieren. Was ich versuchte zu tun war : $('input[name=inputName][value=someValue]'). (Aber mit []im Namensattribut).

Aidan
quelle

Antworten:

262

Versuchen Sie gemäß der jQuery-Dokumentation Folgendes:

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

[EDIT] Ich bin mir jedoch nicht sicher, ob dies die richtige Syntax für Ihren Selektor ist. Sie wollen wahrscheinlich:

$('input[name="inputName[]"][value="someValue"]')
Dancrumb
quelle
32
Guter Fang. Der Grund für die Notwendigkeit von zwei Backslashes liegt darin, dass ein einzelner Backslash als JavaScript-Zeichenfolgen-Escape-Zeichen interpretiert wird. Sie benötigen also zwei, um einen wörtlichen Backslash anzugeben, der dem Selektor das Escape-Zeichen bereitstellt ... ah, die Freuden mehrerer Zeichenebenen entkommen.
Peter
Danke für das. Es geht nur darum, reguläre Ausdrücke zu verwenden. Dies ist sehr nützlich, wenn Sie Formulardaten direkt an ein Array oder eine Liste in Ihrem bevorzugten Ansichtsrahmen senden. Das hat mir auch geholfen, die Frage nach dem Löschen von Objekten mit mehreren Primärschlüsselelementen zu beantworten. ;)
Luiz Feijão Veronesi
79

Sie können Backslash verwenden, um "lustige" Zeichen in Ihren jQuery-Selektoren zu zitieren:

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

Für Attributwerte können Sie Anführungszeichen verwenden:

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

Jetzt bin ich ein wenig verwirrt von Ihrem Beispiel; Wie genau sieht Ihr HTML aus? Wo wird insbesondere die Zeichenfolge "inputName" angezeigt?

feste Bogosität bearbeiten ; danke @Dancrumb

Spitze
quelle
1
Ich bin nicht in der Lage zu wählen (zufällig ein select - Tag) <select name="foo[bar]">unter Verwendung $('select[name=foo\\[bar\\]]')jedoch ich bin die Lage , dies zu tun mit $('select[name="foo[bar]"]), du zweiten Vorschlag.
Frank Nocke
53

Die Attributselektor Syntax ist , [name=value]wo nameder Attributname und valueder Attributwert.

Wenn Sie also alle inputElemente mit dem Attribut auswählen möchten, das nameden Wert hat inputName[]:

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

Und wenn Sie nach zwei Attributen suchen möchten (hier: nameund value):

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

Wenn der Selektor in einer Variablen enthalten ist, kann der folgende Code hilfreich sein:

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 diesem Fall stellen wir allen Sonderzeichen einen doppelten Backslash voran.

Eric Kigathi
quelle
1
selector.replace (/ ([|]) / g, '\\\\ $ 1'); hat ein bisschen besser für mich funktioniert, weil es die entkommenen Schrägstriche hinzufügt und zwei, nicht einen Flucht-Schrägstrich erzeugt ...
Fydo
@Fydo nur daran denken, dass Sie auch einige andere Charaktere entkommen müssen, einschließlich Doppelpunkte,
Punkte
1

Trennen Sie es einfach mit verschiedenen Anführungszeichen:

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

JQuery:

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