2

我有一些这样的 HTML(是的,这有点奇怪,但它是一个现有的项目):

<table>
<tr id="21.30---22.00">
    <td class='51'>Text</td>
</tr>
</table>​

还有一些像这样的JS:

$(document).ready(function(){
    var time = "21.30---22.00";

    // jQuery needs . to be escaped to \\.
    // Regex needs \ to be escaped as \\. 
    // JS needs \ to be escaped as \\.

    time = time.replace(/\./g,'\\\\\\.');

    $("tr#" + time + " td.51").css("color","blue");
});​

实际上,时间字符串是由一些 JSON 生成的,因此是一种奇怪的方式。

这在以前的 jQuery 版本中有效,但在 1.8 中没有,可能是由于 Sizzle 的变化。这是它不起作用的示例:

jQuery 1.7.2:http: //jsfiddle.net/VnA4m/

jQuery 1.8:http: //jsfiddle.net/VnA4m/1/

关于如何从我time = "21.30---22.00"的选择器获得适用于 1.8 的选择器的任何想法?

4

2 回答 2

5

试试这段代码---它将使用属性选择器进行选择

$("[id='21.30---22.00']").foo
于 2012-08-17T12:24:03.660 回答
3

正则表达式不需要转义\s - 正则表达式中唯一的东西是.. 此外,jQuery 的要求是它必须接收斜线;这就是为什么您需要两个以便 JavaScript 解释器不使用它的原因。

所以,\\.应该足够了:http: //jsfiddle.net/VnA4m/2/。这也适用于 jQuery 1.7.2 - 我不确定为什么多余的斜线实际上在那里工作。看起来这是一个错误 -\\\\.失败,\\\\\\.再次工作......

于 2012-08-17T12:24:14.063 回答