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).

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"]')

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


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]')

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.


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();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.