2013-07-09 30 views
6

Kimlik parametrelerinde köşeli parantez kullanan eski bir sistem üzerinde çalışıyorum. Ör:Eksotik kimliğe sahip öğeler seçme

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

jQuery Ben eski kodu değiştiremezsiniz gerçeği göz önüne alındığında ben diyelim ki, bu kimliği kullanmaya çalıştığınızda oldukça haklı olarak şikayet,

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

(javaScript olmak üzere) ve bu yüzden mevcut id'lerle (herhangi bir bağlamda geçerli olan ya da olmayabilen) sıkışmış durumdayım, bu karmaşanın etrafında çalışmak için iyi bir yol ne olurdu?

+1

Sorumun cevabı değil, ama her zaman '$ (document.getElementById ('şey-sen-benzeri'))' ve jQuery kaydetmek bazı işler kullanabilirsiniz:

ince aşağıda işin de. – Tim

+0

Aşağıdaki önerileri deneyeceğim. Dokümanlar okudu, ancak bunu kaçırmayı başardı. Benim hatam. Her tarafta + 1'ler. Sizler rock. –

cevap

10

bu şekilde deneyin:

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

Onların seçicileri kullanılan jquery karakter saklıdır olarak [ ve ] kaçmak gerekir.

here

Artı tabii bu $('[id="mySelect[]"]') yapabileceğini 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").

ve turp göz at Fakat özellik seçici performansı olduğundan akıllıca bu yavaş olacaktır ve kimlik seçiciyi kullanmanın avantajını kaybedersiniz, ancak chars'lardan kaçmak için kullanışsız olursanız kullanışlı olur.

11

Meta karakterleri kullanırken bunlardan kaçınmanız gerekir.

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: \.

bunu kaçmak istemiyorsanız

Jquery selector docs saying that

$("#mySelect\\[\\]").append(options); 
, bu jsfiddle link deneyin seçici

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

kullanabilirsiniz.

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

Birincisi, seçici seçici ve performansın daha yavaş olduğu ve kimlik seçiciden faydalanmadığı için iyi bir seçici değildir. Bu konuda '$ ('[id =" mySelect [] "]')' – PSL

+0

@PSL yapabilirdiniz. Evet haklısınız, ama '[id =" mySelect [] "]' olarak kullanmak bir sorun olur. YUI seçicisinde ve muhtemelen krom seçicide çalışmayacaktır. –

+0

Krom tarayıcıda veya başka tarayıcılarda çalışacak, neden böyle düşünüyorsunuz? – PSL