2010-03-02 4 views
149

Ich versuche, dieses Element zu wählen, die eckigen Klammern im Namen Attribut hat:jQuery-Selektor für Eingänge mit eckigen Klammern im Namen Attribut

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

Ich habe schon versucht, diese (was nicht funktioniert) :

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

und auch nicht das:

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

oder dies:

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

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

+4

@Maerlyn, ja, obwohl ich diese Frage fast ein Jahr vor der anderen Frage gestellt habe, die Sie erwähnen. – aidan

Antwort

215

Per der jQuery documentation, versuchen Sie dies:

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

[EDIT] Aber ich bin mir nicht sicher, dass die richtige Syntax für die Wähler ist. Sie wollen wahrscheinlich:

$('input[name="inputName[]"][value="someValue"]') 
+25

Guter Fang. Der Grund für die Verwendung von zwei umgekehrten Schrägstrichen ist, dass ein einzelner umgekehrter Schrägstrich als JavaScript-Zeichenfolgenfluchtzeichen interpretiert wird. Sie benötigen also zwei, um einen umgekehrten Schrägstrich anzugeben, der dem Selektor das Escape-Zeichen zur Verfügung stellt ... ah, die Freuden mehrerer Zeichenebenen entkommt. – Peter

+0

Das ist verrückt angesichts Gumbo Antwort unten. Doppelte Flucht .. Nein danke! –

+0

DANKE !! Genau das, was ich brauchte. –

47

Die Syntax des Attributselektors lautet [name=value], wobei name der Attributname und value der Attributwert ist.

Also, wenn Sie alle input Elemente mit dem Attribut name mit dem Wert inputName[] auswählen möchten:

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

Und wenn Sie wollen für zwei Attribute überprüfen (hier: name und value):

$('input[name="inputName[]"][value=someValue]') 
+2

Das ist viel schöner als das ganze Backlash, und ich kann bestätigen, dass es auf Chrome 9 und IE6 funktioniert. JQuery Version ist hier 1.4.4 – pablobm

+0

Vielen Dank für das Hinzufügen dieser Antwort!Das Verwenden von Anführungszeichen ist praktischer als die Lösung, wenn dynamisch Selektoren erstellt werden. – octern

+0

Funktioniert für mich in 1.8.3, nett. –

70

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

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

Für Attributwerte, können Sie Zitate:

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

Nun, ich bin ein wenig verwirrt von Ihrem Beispiel; Wie sieht dein HTML genau aus? Woher kommt der String "inputName"?

bearbeiten fixed bogosity; Dank @Dancrumb

+3

Die jQuery-Dokumentation schreibt vor, dass zwei Backslashes für das Escaping benötigt werden. – Dancrumb

+2

oh durr du hast Recht - es ist nicht so sehr für jQuery selbst aber, weil Javascript die einzelnen aussortieren wird! Vielen Dank. – Pointy

+0

abgestimmt nach folgendem Edit – Dancrumb

4

Wenn der Wähler 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 sind wir alle Sonderzeichen mit doppelter Backslash voranstellen.

+1

selector.replace (/ (\ [| \])/g, '\\\\ $ 1'); funktionierte ein wenig besser für mich, weil es die entkommenen Schrägstriche hinzufügt und zwei, nicht einen Fluchtschlitz produziert ... – Fydo

+1

Dieses gerade TOTALLY sendete mich herauf! Vielen Dank!! –

+0

@Fydo nur daran denken, dass Sie auch einige andere Zeichen einschließlich Doppelpunkte, Perioden entkommen müssen –