限制为jQuery id字符串?

时间:2011-04-11 10:23:12

标签: javascript jquery find

简而言之,我的问题是字符串在jQuery中成为可搜索的id或可搜索内容的限制是什么。


更新:我得到了ID部分,但不是为什么我甚至无法使用该字符串搜索html内容。对于任何愿意告诉我一个正则表达式来改变模式的人来说,从“MM / dd / yy HH:mm:ss”到“MMddyyHHmmss”


详情如下:

我正在尝试使用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");

但是如果timeStamp稍微复杂一点,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();

无济于事。

在ajax调用期间,JSON被编码和解码正常,因为console.log (response.timeStamp);将提供正确的输出。

有什么想法吗?我应该以某种方式逃避timeStamp字符串以在jQuery搜索中使用它吗?

PS 1:如果您发现任何语法错误,很可能是由于剪切&amp;粘贴和简化示例的代码,因为使用简单的timeStamp,我可以使它在真正的js文件中工作。

PS 2:我知道在我的具体案例中,解决方法是使用两个不同的字符串,一个用于文本中的时间戳,另一个用于id(更简单)用于id,但是我不理解这里的限制。

2 个答案:

答案 0 :(得分:7)

您需要为元素ID提供有效值。来自html 4规范:

  

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。

但是当你在ID中使用冒号和句点时,你可能会遇到jQuery css选择器的问题,因为它们被jQuery解析为类名和伪元素。

因此,您的元素ID应仅包含字母,数字,连字符和下划线。

答案 1 :(得分:0)

根据评论和答案,我尝试使用双反斜杠转义字符串,但它不起作用(仍然没有结果),即使在搜索文本而不使用那些长ID​​时也是如此。所以,我最终通过在客户端上删除了id部分的空格和符号:

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

并在服务器上:

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

然后我将格式化的日期添加到文本中并将其剥离到ID。虽然我仍然对jQuery搜索字符串的限制感到好奇,但它确实有效。