2012-03-17 48 views
4

您可能已經知道,HTML5 allows more characters to be used in ID names - 請參閱the HTML5 spec,它現在有空格作爲唯一無效字符。試圖在JQuery中使用它顯示JQuery忽略特定有效字符'/'後的ID中的所有字符。JQuery 1.7.1貌似無法處理HTML5元素ID

<section> 
    <div id='foo/bar'> 
     YAAY 
    </div> 
    <div id='foo'> 
     BOO 
    </div> 
</section> ​ 

登錄 '富/酒吧' 元素

console.log(​$(document).find('div#foo/bar')​​​​)​ 

顯示被返回不正確的元件:

[ 
<div id=​"foo">​ 
    BOO 
​</div>​ 
] 

這是通過使用兩個電流穩定的JQuery(1.7.1)和當前的JQuery邊緣。

這是一個JQuery錯誤,或者我做錯了什麼?

+0

是有什麼地方隱藏着一個問題嗎? – Christoph 2012-03-17 14:24:28

+0

@Christoph添加的問題,以澄清,我問這是一個JQuery錯誤或我做錯了什麼。 – mikemaccana 2012-03-17 14:26:21

+1

下一次,只需使用這個工具:http://mothereff.in/css-escapes#0foo%2Fbar :) – 2012-08-10 08:41:30

回答

4

逃離斜槓(演示:http://jsfiddle.net/m9NT8/):

console.log(​$(document).find('div#foo\\/bar')​​​​)​ 

PS。 $(document).find('selector')相當於$(selector)

這種行爲是在正則表達式在Sizzle's source code, line 374定義:

ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, 
+1

這很有效。進一步的研究表明,JQuery提到需要爲http://api.jquery.com/category/selectors/上的選擇符轉義字符。「如果你想使用任何元字符(比如!」#$%&' ()* +,。/:; <=>?@ [\] ^'{|}〜)作爲一個名字的文字部分,您必須用兩個反斜槓來轉義字符「令人討厭,但是不錯哦 – mikemaccana 2012-03-17 14:31:11

+0

Ack re:document .find,在我的(非stackoverflow測試用例)應用程序中,我正在處理內存中的字符串,而不是文檔。 – mikemaccana 2012-03-17 14:34:26

+0

嗯,這是一個訣竅:D對不起,我將刪除以前的評論 – 2012-03-17 14:43:07