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

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

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


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

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.


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();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.