Selektor jQuery dla danych wejściowych z nawiasami kwadratowymi w atrybucie name

179

Próbuję wybrać ten element, który ma nawiasy kwadratowe w atrybucie name:

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

Próbowałem tego (co nie działa):

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

i to też nie:

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

albo to:

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

EDYCJA: Jak niektórzy z was zauważyli, $('input[inputName=someValue]')nigdy nie zadziałałoby. Co starałem się zrobić to: $('input[name=inputName][value=someValue]'). (Ale z []atrybutem nazwy).

aidan
źródło

Odpowiedzi:

262

Zgodnie z dokumentacją jQuery , spróbuj tego:

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

[EDYCJA] Jednak nie jestem pewien, czy jest to właściwa składnia dla twojego selektora. Prawdopodobnie chcesz:

$('input[name="inputName[]"][value="someValue"]')
Dancrumb
źródło
32
Dobry chwyt Powodem, dla którego potrzebujesz dwóch odwrotnych ukośników, jest to, że pojedynczy odwrotny ukośnik jest interpretowany jako znak ucieczki łańcucha JavaScript, więc potrzebujesz dwóch, aby podać dosłowny odwrotny ukośnik, który zapewnia znak zmiany znaczenia dla selektora ... ach, radości z wielu poziomów charakteru ucieczka.
Peter
Dziękuję za to. To tylko kwestia użycia wyrażeń regularnych. Jest to bardzo przydatne, gdy dane formularza są przesyłane bezpośrednio do tablicy lub listy w ramach ulubionego widoku. Pomogło mi to również odpowiedzieć na pytanie dotyczące usuwania obiektów z wieloma kluczowymi elementami kluczowymi. ;)
Luiz Feijão Veronesi
79

Możesz użyć ukośnika odwrotnego, aby zacytować „śmieszne” postacie w selektorach jQuery:

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

Do wartości atrybutów możesz użyć cudzysłowów:

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

Teraz jestem trochę zdezorientowany twoim przykładem; jak dokładnie wygląda twój HTML? Gdzie w szczególności pojawia się ciąg „inputName”?

edytuj stałą boginię; dzięki @Dancrumb

Pointy
źródło
1
Nie jestem w stanie wybrać (przypadkowo select tag) <select name="foo[bar]">stosując $('select[name=foo\\[bar\\]]')jednak ja jestem w stanie to zrobić za pomocą $('select[name="foo[bar]"]), ty drugą propozycję.
Frank Nocke
53

Składnia selektora atrybutów to [name=value]gdzie namejest nazwa atrybutu i valuejest to wartość atrybutu.

Więc jeśli chcesz wybrać wszystkie inputelementy z atrybutem nameo wartości inputName[]:

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

A jeśli chcesz sprawdzić dwa atrybuty (tutaj: namei value):

$('input[name="inputName[]"][value=someValue]')
Gumbo
źródło
7

Jeśli selektor jest zawarty w zmiennej, poniższy kod może być pomocny:

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

W tym przypadku poprzedzamy wszystkie znaki specjalne podwójnym odwrotnym ukośnikiem.

Eric Kigathi
źródło
1
selector.replace (/ ([|]) / g, '\\\\ $ 1'); działało dla mnie trochę lepiej, ponieważ dodaje on
znaki
@Fydo pamiętaj tylko, że musisz także uciec przed innymi postaciami, w tym także dwukropkami, kropkami
Eric Kigathi
1

Po prostu oddziel go różnymi cytatami:

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

JQuery:

var value = $('input[name="myName[1][data]"]').val();
slva2000
źródło