简而言之,我的问题是字符串在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));
他们看起来很好,我可以尽可能多地添加。但是,我需要获取每个内的文字才能附加回复。我使用userId
和timeStamp
来查找我需要追加的段落。如果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,但是我不理解这里的限制。
答案 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搜索字符串的限制感到好奇,但它确实有效。