2013-07-09 19 views
6

Pracuję nad starym systemem, który używa nawiasów kwadratowych w parametrach id. Np:Wybieranie elementów o egzotycznym id

<select id="mySelect[]"> 
    <option value="1">Yadda</option> 
    <option value="2">Yadda</option> 
    <option value="3">Yadda</option> 
</select> 

jQuery (jako JavaScript) słusznie narzeka, gdy próbuję użyć tego identyfikatora, powiedzmy, w

$("#mySelect[]").append(options); 

Biorąc pod uwagę fakt, że nie mogę zmienić kod i starszego dlatego utknąłem z istniejącymi identyfikatorami (które mogą, ale nie muszą być ważne w żadnym kontekście), jaki byłby dobry sposób na obejście tego bałaganu i pozwoliłbym wybrać moje elementy?

+1

nie odpowiedź, ale zawsze można użyć '$ (document.getElementById ('Anything-you-like'))' i zapisać jQuery trochę pracy. – Tim

+0

Spróbuję wszystkich sugestii poniżej. Czytałem dokumenty, ale udało mi się tego nie zauważyć. Mój błąd. + 1 s dookoła. Jesteście rockowi. –

Odpowiedz

10

Spróbuj w ten sposób:

$("#mySelect\\[\\]").append(options); 

Musisz uciec [ i ] ponieważ są one zastrzeżone znaki użyte w jquery selektorów.

Wystarczy popatrzeć na jQuery docs

To use any of the meta-characters (such as !"#$%&'()*+,./:;<=>[email protected][]^`{|}~) as a literal part of a name, it must be escaped with with two backslashes: \. For example, an element with id="foo.bar", can use the selector $("#foo\.bar").

i ryba here

Plus oczywiście można to $('[id="mySelect[]"]') zrobić, ale ponieważ jest to wydajność selektor atrybutu mądry to będzie wolniej i tracisz przewagę używania selektora identyfikatora, ale jest przydatny, jeśli w żaden sposób nie unikniesz znaków.

11

Podczas używania meta znaków musisz je wyminąć.

$("#mySelect\\[\\]").append(options); 

Jquery selector docs saying that

To use any of the meta-characters (such as !"#$%&'()*+,./:;<=>[email protected][]^`{|}~) as a literal part of a name, it must be escaped with with two backslashes: \.

Jeśli nie chcesz, by go uniknąć, można użyć przełącznika

$(document.getElementById('mySelect[]') 
3

Spróbuj jsfiddle link.

Oba poniższej pracy grzywny:

console.log($('[id^=mySelect]')); 
console.log($('#mySelect\\[\\]')); 
+1

Pierwszy nie jest dobrym selektorem, ponieważ jest selektorem atrybutów, a wydajność wolniejsza i nie korzysta z selektora identyfikatora. W tym przypadku możesz zrobić '$ ('[id =" mySelect [] "]')' – PSL

+0

@PSL Tak, masz rację, ale byłoby to problem używać '[id =" mySelect [] "] jak nie będzie działać w selektorze YUI i prawdopodobnie w selektorze chrome. –

+0

Będzie działać w przeglądarce Chrome lub w dowolnej innej przeglądarce, dlaczego tak uważasz? – PSL

Powiązane problemy