2011-04-11 51 views
0

只用幾句話,我的問題是字符串在jQuery中是一個可搜索的id或可搜索的內容的侷限性。限於jQuery id字符串?


更新:我得到的ID的一部分,但不是我爲什麼不能,即使在HTML內容與搜索字符串。 「:MM:SS MM/DD/YY HH」 到 「以MMDDYYhhmmss」


詳細情況如下:一個人願意告訴我一個正則表達式來改變從圖案BOUNS

我想使用jQuery獲取多個<p>中的文本。

我加入他們的方法是使用下面的代碼:

$("<p>"+data.timeStamp + " _ " + data.text +"</p>") 
    .addClass(data.source) 
    .attr("id", "msg_"+data.userId+"_"+data.timeStamp) 
    .appendTo($("#messages_"+data.userId)); 

他們看起來不錯,我可以添加多達我可以。但是,然後,我需要獲取每個內的文本以附加響應。我使用userIdtimeStamp來查找我需要追加的段落。它工作得很好,如果timeStamp只是一個數字(例如,通過了Java Servlet創建爲

SimpleDateFormat df = new SimpleDateFormat("MMddyyHHmmss"); 

但jQuery是無法找到它,如果時間戳是有點複雜:

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yy HH:mm:ss"); 

或甚至

SimpleDateFormat df = new SimpleDateFormat("MM-dd-yy HH.mm.ss"); 

我都嘗試

var txt = $("#msg_"+data.message.from+"_"+data.message.timeStamp).html(); 

var txt = $("#messages_"+data.userId).find(":contains('"+data.message.timeStamp+"')").html(); 

無濟於事。

由於console.log (response.timeStamp);會給出正確的輸出,所以JSON在ajax調用期間被編碼和解碼得很好。

任何想法?我應該逃避timeStamp字符串在jQuery搜索中使用它嗎?

PS 1:如果您發現任何語法錯誤,這最有可能是由於切&粘貼和簡化的例子的代碼,因爲一個簡單的timeStamp我可以使它在實際js文件工作。

PS 2:我知道,在我的特定情況下,解決辦法是使用兩個不同的字符串,一個在文本的時間戳和一個(簡單)的ID,但是這並不能幫助我理解這裏的侷限性。

+1

我認爲ID不允許包含空格。 – 2011-04-11 10:28:32

+0

@Felix得到了,但我甚至無法找到該字符串搜索內容 – Aleadam 2011-04-11 11:30:08

回答

6

您需要爲元素ID具有有效值。來自html 4規範:

ID和名稱標記必須以字母([A-Za-z])開頭,後面可以跟隨任意數量的字母,數字([0-9]),連字符(「 - 」),下劃線(「_」),冒號(「:」)和句點(「。」)。

但是,當您在ID中使用冒號和句點時,您會發現jQuery css選擇器存在問題,因爲它們被jQuery解析爲類名稱和僞元素。

所以你的元素ID只能包含字母,數字,連字符和下劃線。

+2

您可以使用雙反斜槓(\\\)來逃離冒號和句點 – Alex 2011-04-11 11:31:39

+0

我應該讀取ID規範:/。但我仍然在尋找內容,無論哪種方式都適合我。那麼,你知道我應該如何逃避這些角色? – Aleadam 2011-04-11 11:32:14

+0

@亞歷克斯謝謝。我會嘗試的。 – Aleadam 2011-04-11 11:33:10

0

基於評論和答案,我嘗試使用雙反斜槓字符串進行轉義,但它不起作用(仍然沒有結果),即使在搜索文本時並不使用這些長ID。所以,我最終做在客戶端上刪除該ID部分空格和符號:

var ts = data.timeStamp.replace(/[\:\/ ]/g, ""); 

,並在服務器上:

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yy HH:mm:ss"); 

然後我說格式化的日期,以文字和剝離直到ID。它的工作原理,但我仍然對jQuery搜索字符串的侷限性感到好奇。