Recentemente, tenho lido cada vez mais sobre pessoas que usam atributos personalizados em suas tags HTML, principalmente com o objetivo de incorporar alguns bits extras de dados para uso no código javascript.
Eu esperava reunir algum feedback sobre se o uso de atributos personalizados é ou não uma boa prática e também quais são algumas alternativas.
Parece que pode realmente simplificar o código do servidor e do cliente, mas também não é compatível com o W3C.
Deveríamos usar atributos HTML personalizados em nossos aplicativos da web? Por que ou por que não?
Para quem acha que os atributos personalizados são uma coisa boa: quais são algumas das coisas que você deve ter em mente ao usá-los?
Para aqueles que pensam que atributos personalizados são algo ruim: quais alternativas você usa para realizar algo semelhante?
Atualização: Estou interessado principalmente no raciocínio por trás dos vários métodos, bem como aponta por que um método é melhor que outro. Eu acho que todos nós podemos criar 4-5 maneiras diferentes de realizar a mesma coisa. (elementos ocultos, scripts embutidos, classes extras, informações de análise de IDs etc.).
Atualização 2: Parece que o data-
recurso de atributo HTML 5 tem muito suporte aqui (e eu tendem a concordar, parece uma opção sólida). Até agora, não vi muitas refutações nessa sugestão. Existem problemas / armadilhas para se preocupar em usar essa abordagem? Ou é simplesmente uma invalidação "inofensiva" das especificações atuais do W3C?
Respostas:
O HTML 5 permite explicitamente atributos personalizados que começam com
data
. Então, por exemplo,<p data-date-changed="Jan 24 5:23 p.m.">Hello</p>
é válido. Como é oficialmente suportado por um padrão, acho que essa é a melhor opção para atributos personalizados. E não exige que você sobrecarregue outros atributos com hacks, para que seu HTML possa permanecer semântico.Fonte: http://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes
fonte
Aqui está uma técnica que eu tenho usado recentemente:
O objeto de comentário está vinculado ao elemento pai (por exemplo, #someelement).
Aqui está o analisador: http://pastie.org/511358
Para obter os dados para qualquer elemento específico, basta chamar
parseData
com uma referência ao elemento passado como o único argumento:Pode ser mais sucinto do que isso:
Acesse isso:
A única desvantagem de usar isso é que ele não pode ser usado com elementos de fechamento automático (por exemplo
<img/>
), pois os comentários devem estar dentro do elemento a ser considerado como dados desse elemento.EDIT :
Benefícios notáveis desta técnica:
Aqui está o código do analisador (copiado do hiperlink http://pastie.org/511358 acima, caso ele se torne indisponível no pastie.org):
fonte
Você pode criar qualquer atributo se especificar um esquema para sua página.
Por exemplo:
Adicione isso
Facebook (tags pares)
fonte
A maneira mais fácil de evitar o uso de atributos personalizados é usar os atributos existentes.
use nomes de classe significativos e relevantes.
Por exemplo, faça algo como:
type='book'
etype='cd'
, para representar livros e CDs. As aulas são muito melhores para representar o que algo é .por exemplo
class='book'
Eu usei atributos personalizados no passado, mas honestamente, realmente não há necessidade deles, se você usar os atributos existentes de uma maneira semanticamente significativa.
Para dar um exemplo mais concreto, digamos que você tenha um site fornecendo links para diferentes tipos de lojas. Você pode usar o seguinte:
o estilo css pode usar classes como:
No exemplo acima, vemos que ambos são links para lojas (em oposição aos outros links não relacionados no site) e um é uma loja de CDs e o outro é uma livraria.
fonte
Incorpore os dados no dom e use metadados para jQuery .
Todos os bons plug-ins suportam o plug-in de metadados (permitindo opções por tag).
Também permite estruturas de dados / dados infinitamente complexas, bem como pares de valores-chave.
OU
OU
Em seguida, obtenha os dados da seguinte maneira:
fonte
Não vejo problema em usar os recursos XHTML existentes sem quebrar nada ou estender seu espaço para nome. Vamos dar uma olhada em um pequeno exemplo:
Como adicionar informações adicionais a some_content sem atributos adicionais? Que tal adicionar outra tag como a seguinte?
Ele mantém a relação por meio de um id / extensão bem definido "_extended" de sua escolha e por sua posição na hierarquia. Costumo usar essa abordagem em conjunto com o jQuery e sem realmente usar técnicas semelhantes ao Ajax.
fonte
Não. Tente algo assim:
fonte
Não estou usando atributos personalizados, porque estou produzindo XHTML, porque quero que os dados sejam legíveis por máquina por software de terceiros (embora eu possa estender o esquema XHTML, se quiser).
Como alternativa aos atributos personalizados, na maioria das vezes estou encontrando os atributos id e class (por exemplo, como mencionado em outras respostas) suficientes.
Além disso, considere o seguinte:
Se os dados extras devem ser legíveis por humanos e legíveis por máquina, eles precisam ser codificados usando tags e texto HTML (visíveis) em vez de como atributos personalizados.
Se não precisar ser legível por humanos, talvez possa ser codificado usando tags e texto HTML invisíveis .
Algumas pessoas abrem uma exceção: elas permitem atributos personalizados, adicionados ao DOM por Javascript no lado do cliente em tempo de execução. Eles acham que isso é bom: como os atributos personalizados são adicionados apenas ao DOM no tempo de execução, o HTML não contém atributos personalizados.
fonte
Criamos um editor baseado na Web que entende um subconjunto de HTML - um subconjunto muito rigoroso (que é entendido quase universalmente pelos clientes de email). Precisamos expressar coisas como
<td width="@INSWIDTH_42@">
no banco de dados, mas não podemos tê-lo no DOM, caso contrário, o navegador em que o editor é executado fica em pânico (ou é mais provável que fique em pânico do que em atributos personalizados) . Como queríamos arrastar e soltar, colocá-lo puramente no DOM, assim como o jquery.data()
(os dados extras não foram copiados corretamente). Provavelmente também precisávamos de dados extras para o passeio.html()
. No final, decidimos usar<td width="1234" rs-width="@INSWIDTH_42@">
durante o processo de edição e, quando publicamos tudo, removemoswidth
e fazemos uma pesquisa e destruição de expressões regularess/rs-width=/width=/g
.No começo, o cara que escrevia a maior parte disso era o nazi de validação e tentava de tudo para evitar nosso atributo personalizado, mas no final concordou quando nada mais parecia funcionar para TODOS os nossos requisitos. Ajudou quando ele percebeu que o atributo personalizado nunca apareceria em um email . Consideramos codificar nossos dados extras em
class
, mas decidimos que esse seria o maior dos dois males.Pessoalmente, prefiro deixar tudo limpo e passar por validadores, etc., mas como funcionário da empresa, devo lembrar que minha principal responsabilidade é promover a causa da empresa (ganhar tanto dinheiro o mais rápido possível), não o desejo egoísta de pureza técnica. As ferramentas devem funcionar para nós; não nós por eles.
fonte
Eu sei que as pessoas são contra, mas eu vim com uma solução super curta para isso. Se você deseja usar um atributo personalizado como "meu", por exemplo:
Em seguida, você pode executar esse código para recuperar um objeto da mesma forma que jquery.data ().
fonte
Especificação: Crie um controle ASP.NET TextBox que formata automaticamente seu texto como um número, de acordo com as propriedades "DecimalSeparator" e "ThousandsSeparator", usando JavaScript.
Uma maneira de transferir essas propriedades do controle para JavaScript é fazer com que o controle processe propriedades personalizadas:
Propriedades personalizadas são facilmente acessíveis por JavaScript. E enquanto uma página usando elementos com propriedades personalizadas não for validada , a renderização dessa página não será afetada.
I única usar essa abordagem quando eu quero associar tipos simples, como strings e inteiros para elementos HTML para uso com JavaScript. Se eu quiser facilitar a identificação dos elementos HTML, utilizarei as propriedades de classe e identificação .
fonte
Para aplicativos Web complexos, descarto atributos personalizados em todo o lugar.
Para páginas mais públicas, eu uso o atributo "rel" e despejo todos os meus dados no JSON e, em seguida, decodificá-lo com MooTools ou jQuery:
Ultimamente, estou tentando manter o atributo de dados HTML 5 apenas para "preparar", mas ele ainda não veio naturalmente.
fonte
Eu uso campos personalizados o tempo todo, por exemplo, <ai = "" .... Então faça referência a i com jquery. HTML inválido, sim. Funciona bem, sim.
fonte
Atributos personalizados, na minha humilde opinião, não devem ser usados, pois não são validados. Como alternativa, você pode definir muitas classes para um único elemento, como:
fonte
class
atributo definitivamente não é reservado apenas para "looks". Outro uso é "processamento de propósito geral por agentes do usuário". Disso fala a especificação: w3.org/TR/REC-html40/struct/global.html#h-7.5.2