2014-08-28 132 views
0

我有一些代碼有'。'字符在CSS類名,因此逃生時需要使用選擇$('.classNameWithDot\\.inIt')jquery:文字字符串選擇符與變量選擇符的區別

我遇到了一個有趣的錯誤,由此,如果你在一個變量選擇存儲也不會如預期,除非你改變你如何共同尋找元素從兩個反斜槓中將點字符轉義。

//will not work 
//var selector = '.classNameWithDot\\.inIt'; 

//works in a variable, with one backslash as opposed to the required double backslash for the literal 
var selector = '.classNameWithDot\.inIt'; 

var element = $(selector); 

我的問題是爲什麼會出現這種情況?爲什麼我們必須在文字選擇器中使用雙反斜線,而在變量選擇器中使用單斜線?

+0

'」 .classNameWithDot \ .inIt''結果,所以我懷疑你的觀察是否正確。無論您使用字符串文字還是變量都無關緊要。除非你可以用http://jsfiddle.net/(或類似的東西)來重現這種行爲,否則我認爲你的實際問題在別的地方。 – 2014-08-28 22:14:06

+0

這個小提琴與您的描述不符:http://jsfiddle.net/jtbowden/zf4daLxt/ – 2014-08-28 22:25:30

+0

類名稱不以'點'開頭。例如:'someName.restOfName'。 @FelixKling – nelsonomuto 2014-09-28 22:36:46

回答

1

在JavaScript 字符串文字(這是當該串中的源代碼被輸入了)\具有特殊的含義如果你想把它放在一個字符串中,你必須用\(這是逃避角色)逃脫它。

var str = 'a slash(\\)'; 

斜槓(\)

現在jQuery選擇一個點是一個特殊字符,你猜對了需要進行轉義

#id.class

作爲選擇器,這意味着選擇具有編號爲的元素210和class,但如果你的ID是id.class那麼該點需要被轉義。

#id.class

現在這是你要找的選擇,與id.class
現在的ID的元素,我們如何在JS寫這

var str = '#id\.class'; 

#id。類

這並不因爲\工作是JS轉義字符,我們不希望在.我們希望它在jQuery選擇發動機逃脫JS逃脫。
所以我們必須逃避轉義字符(本身)。

var str = '#id\\.class';/* 
     this____|| 
     escapes | 
     this_____|  */ 

#ID \的.class

現在你可以在`.classNameWithDot.inIt`你的選擇傳遞給jQuery的

+0

謝謝穆薩,你的解釋澄清了混淆。 – nelsonomuto 2014-09-28 22:33:12

2

我想你可能會讓你的測試用例倒退。

我做了一個jsbin: http://jsbin.com/xuxixarimuhe/1/

雙反斜線允許你實際上是在一個字符串輸入一個反斜槓,否則就意味着創造一個轉義序列。

所以需要雙反斜槓,以便您可以在選擇器中放入\。

這就是說...我強烈建議,如果可以的話,刪除一個css類名的時間段,我甚至不知道你可以這樣做。

感謝您的書呆子鷸)

  • 克雷格