/ / Complex Selector quebra no jQuery 1.8, mas funcionou no 1.7.2 - javascript, jquery, sizzle

Seletor complexo quebra em jQuery 1.8, mas trabalhou em 1.7.2 - javascript, jquery, sizzle

Eu tenho algum HTML como este (sim, é um pouco estranho, mas é um projeto existente):

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

E algum JS como este:

$(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");
});​

Na realidade, a string de tempo é produzida a partir de algum JSON, daí a maneira estranha de contornar.

Isso funcionou nas versões anteriores do jQuery, mas não na 1.8, presumivelmente devido às mudanças no Sizzle. Aqui está um exemplo de que não está funcionando:

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

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

Alguma ideia de como posso obter do meu time = "21.30---22.00" para um seletor que funciona em 1.8?

Respostas:

5 para resposta № 1

tente este código --- irá selecionar usando o seletor de atributos

$("[id="21.30---22.00"]").foo

3 para resposta № 2

O regexp não precisa escapar do s - a única coisa em sua regexp é .. Além disso, o requisito do jQuery é que ele receba as barras; é por isso que você precisa de dois para que o interpretador de JavaScript não os consuma.

Assim, \. deve ser suficiente: http://jsfiddle.net/VnA4m/2/. Isso também funciona no jQuery 1.7.2 - Não tenho certeza de por que as barras estranhas realmente funcionaram lá. Parece que foi um bug - \\. falha, \\\. novamente funciona ...