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 № 1tente 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 ...