Se meu html estivesse assim:
<td class="controlCell">
<input class="inputText" id="SearchBag.CompanyName" name="SearchBag.CompanyName" type="text" value="" />
</td>
Como eu selecionei # SearchBag.CompanyName com JQuery? Não consigo fazê-lo funcionar e temo que seja o ponto que está quebrando tudo. O irritante é que renomear todos os meus IDs seria muito trabalhoso, sem mencionar a perda de legibilidade.
Nota:
Por favor, não vamos começar a falar sobre como as tabelas não são feitas para layout. Estou muito ciente do valor e das deficiências do CSS e tento usá-lo o máximo possível.
Respostas:
@Tomalak nos comentários:
"# Id.class" é um seletor válido que requer que um id e uma classe separada correspondam; é válido e nem sempre totalmente redundante.
A maneira correta de selecionar um literal '.' em CSS é escapar: “#id \ .moreid”. Isso costumava causar problemas em alguns navegadores mais antigos (em particular o IE5.x), mas todos os navegadores de desktop modernos são compatíveis.
O mesmo método parece funcionar no jQuery 1.3.2, embora eu não o tenha testado completamente; O quickExpr não atende, mas o analisador de seletor mais envolvido parece acertar:
fonte
$('[id="profile.birthdate"]')
Uma variante seria esta:
fonte
Você não precisa escapar de nada se usar
document.getElementById
:getElementById
assume que a entrada é apenas um atributo id, portanto o ponto não será interpretado como um seletor de classe.fonte
Resposta curta : Se você possui um elemento com id =
"foo.bar"
, pode usar o seletor$("#foo\\.bar")
Resposta mais longa : isso faz parte da documentação do jquery - seletores de seção que você pode encontrar aqui: http://api.jquery.com/category/selectors/
Sua pergunta é respondida logo no início da documentação:
fonte
A seleção de attr parece apropriada quando seu ID está em uma variável:
fonte
Isso está documentado na API de seletores do jQuery :
Em suma, prefixe o
.
com\\
.O problema é que
.
corresponderá a uma classe, portanto$('#SearchBag.CompanyName')
corresponderá<div id="SearchBag" class="CompanyName">
. Os que escaparam\\.
serão tratados como normais,.
sem significado especial, correspondendo ao ID que você deseja.Isso se aplica a todos os caracteres
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
que, de outra forma, teriam um significado especial como seletor no jQuery.fonte
Caras que procuram uma solução mais genérica, encontrei uma solução que insere uma barra invertida antes de qualquer caractere especial, isso resolve problemas relacionados à recuperação de nome e ID de uma div que contém caracteres especiais.
Espero que isso seja útil!
fonte
Você pode usar um seletor de atributos:
Ou você pode especificar o tipo de elemento:
fonte