2017-01-16 55 views
0

我正在使用jQuery來平滑滾動到我的網站上的一些錨點。錨是以編程方式創建的,以便它們可以包含一些德語元音變音,例如»ü,ä,ö«或其他Unicode字符,例如»ß,è«等。 該函數使用哈希來選擇哈希引用的元素:jQuery選擇器允許使用哪些字符?

// Smooth scroll to anchor position. 
function smoothScroll (hash) { 

    var scrollTo = typeof $(hash).offset().top != undefined ? $(hash).offset().top: 0; 

    $('html, body').animate({ 
    scrollTop: scrollTo 

    }, 800); 
} 

// Test smooth scroll. 
smoothScroll ("#Akademie-für-Gestaltung"); 

這適用於Chrome和Safari,但不適用於Firefox。它產生以下錯誤:

Error: Syntax error, unrecognized expression: #Akademie-f%C3%BCr-Gestaltung... 

這使我想起了我的問題。我如何知道,jQuery選擇器中允許使用哪些字符? jQuery documentation提到只有以下字符!"#$%&'()*+,./:;<=>[email protected][\]^{|}~

而我該如何逃避其他角色,以確保選擇器將在所有現代瀏覽器中工作?

+0

'-'是一個元字符。使用它作爲選擇器時,必須將其轉義。 –

+1

@RajaprabhuAravindasamy:不,你不需要在CSS選擇器中轉義'-'。 – CBroe

+0

_「我如何知道,jQuery選擇器中允許使用哪些字符? 「_ - 首先,你檢查jQuery文檔。 https://api.jquery.com/category/selectors/ – CBroe

回答

2

How do I know, which characters are allowed in jQuery selectors?

它們是CSS選擇器。所有的細節都在the selectors specification。在選擇器中使用的文字ID和類名稱的規則是here。轉義讓你可以使用你無法直接使用的字符(但這是一種痛苦,所以最好避免)。因此,例如,儘管您可以使用ü,但這樣做很痛苦,因爲您不能直接使用它,您必須將其轉義。

但ID選擇器只是一種特殊的(相當快)類型的選擇器。您可以在引號中使用attribute selector,這意味着您可以避免轉義:$('[id="Akademie-f%C3%BCr-Gestaltung"]')這非常有效且正確。

+0

感謝您的解釋!我發現,它的工作原理還有,如果我避免jQuery但使用'document.getElementById(hash)'。所以問題必須做如何jQuery處理選擇器?我喜歡你的工作! – user5950

+1

@ user5950:不,只是'getElementById'不帶選擇器,它需要一個ID,所以沒有問題,但一個CSS ID選擇器('#foo ')是一個特殊的東西,只有一小部分允許使用的字符,你可以在不逃脫的情況下使用。你可以給自己一個方便的工具func :$ .gid = function(id){var e = document.getElementById(id);返回e? $(e):$(); };'Then:'$ .gid(「Akademie-f%C3%BCr-Gestaltung」)。show();'或類似的。這樣,你就可以獲得'getElementById'的速度,而不用擔心ID的內容。 –

相關問題