2012-03-30 67 views
2

我很努力地使用包含brakcets的jquery選擇器。 基本上我從我的jQuery代碼中解析服務器的JSON響應。然後,在解析完成後,我遍歷該對象。jquery選擇器不支持括號

這個對象有這樣的結構:

errors = { 
    input#title_id: "error message", 
    select#authors_id[]: "error message 2" 
    } 

然後我遍歷這個地圖狀如下:

$.each(errors, function(fieldSelector,errMsg){ 
    fieldSelector = fieldSelector.replace('[','\\\\['); 
    fieldSelector = fieldSelector.replace(']','\\\\]'); 
    $(fieldSelector).hide(); //for the example 
} 

一切運作良好,除了具有與括號中的ID選擇!

回答

0

jQuery Selector documentation,你需要使用兩個支架逃跑元字符:

如果你希望使用任何的元字符(如 !"#$%&'()*+,./:;<=>[email protected][\]^{|}~)作爲名稱的文本部分, 你必須用兩個反斜槓來逃避角色:\\。 例如,如果您有一個帶有id="foo.bar"的元素,則可以使用 使用選擇器$("#foo\\.bar")

但是,只需要使用雙括號,以便在選擇器字符串中存在單個括號char \。選擇器引擎隨後使用該括號來轉義元字符。無論如何,這意味着你的代碼也只需要使用兩個括號 - 沒有必要逃避提供一個額外的級別:

$.each(errors, function(fieldSelector,errMsg){ 
    fieldSelector = fieldSelector.replace('[','\\['); 
    fieldSelector = fieldSelector.replace(']','\\]'); 
    $(fieldSelector).hide(); //for the example 
}); 
+0

你的意思是在服務器端定義它嗎?因爲我在PHP腳本中調用json_encode函數後收到'errors'。 – renard 2012-03-30 19:41:33

+0

是的,但我認爲這是我通過在fieldSelector上使用替換而不是? – renard 2012-03-30 19:51:12

+0

@renard - 是的,但你提供了額外的逃跑等級。看到我更新的答案。 – 2012-03-30 20:08:20

0

稍微容易的答案 - 您可以使用戈壁,不具有特殊的語法,而不是Sizzle。

$.each(errors, function(fieldSelector,errMsg){ 
    $(document.getElementById(fieldSelector)).hide(); //for the example 
}