2010-07-26 11 views
5

Zgodnie z dokumentacją jQuery, potrzebuję uciec metaznaków występujących w łańcuchach selektora, gdy występują one jako literały. Jednak nie mogłem znaleźć wielu konkretnych przykładów, kiedy i kiedy nie uciec selektorom. Więc kiedy i kiedy nie potrzebuję uciec metaznaków, kiedy mają być interpretowane jako literały, w:Kiedy muszę uciec z metacharectars? (Selektory jQuery)

Selektory atrybutów? np.

$("[attr=value]") 

Selektory identyfikatorów? tj.

Selektory zajęć? tj

$(".class"); 

I czy istnieje sposób napisać funkcję, która zastępuje metachars w ciągach wybieraka, przy jednoczesnym zachowaniu charakteru początku? tj:

// replace all meta chars, preserving the id selection? 
$("#id.rest$of*string") 

// replace all meta chars, preserving the attribute selection? 
// going back to my previous question, do I even need to escape the metachars in this situation? 
$("[attr=blah.dee#foo*yay]") 

Powodem, dla którego zadaję to pytanie, jest to, że pracuję z witryną internetową, która ma kilka naprawdę nieprzyjemnych selektorów. I nie mam kontroli nad stroną, więc nie mogę zmienić selektorów, żeby lepiej się z nimi pracowało.

DZIĘKI !!

Odpowiedz

3

Od docs jQuery:

Jeśli chcesz użyć dowolnego z meta-znaków (#; &, + * ~ ' "^ $ => | /.!) jako dosłowny część nazwy, trzeba uciec znak z dwóch ukośników ...

Wszystkie one muszą być uciekł:

  1. id
  2. nazwa klasy
  3. nazwa atrybutu
  4. wartość atrybutu
  5. nazwa elementu

Pierwsze cztery są oczywiste, a oto przykład na piątą. Nazwy elementów w XML mogą zawierać "." na przykład i nadal będzie to valid.

<user.name>John Doe</user.name> 

Gdybyś musiał wybrać wszystkie elementy user.name, to . musi być uciekł

$(xml).find("user\\.name"); 
0

Zamiast bezczelnie kradnie czyjąś odpowiedź, będę wskazać Ci do niego: jQuery selector value escaping, gdzie jQuery Metoda parsowania selektora jest opisana szczegółowo.

Krótka odpowiedź: możesz mieć kłopoty, ponieważ parser selektora jQuery nie jest w 100% zgodny ze standardami. Zgodnie z sugestią związaną z odpowiedzią, możesz być w stanie obejść ją, wywołując standardowe metody DOM (document.getElementById()), które będą działać z zabawnymi selektorami, a następnie przekazują surowy element DOM do selektora jQuery.

$(document.getElementById("id.rest$of*string")); 
Powiązane problemy