2009-08-20 15 views
41

Possibili duplicati:
Custom attributes - Yay or nay?
Non-Standard Attributes on HTML Tags. Good Thing? Bad Thing? Your Thoughts?Va bene aggiungere i propri attributi agli elementi HTML?

Nel progetto di apprendimento corrente sto lavorando, ho bisogno di aggiungere un attributo il cui valore sarà un numero. All'inizio ho pensato di usare "id" per questo scopo ma lo an answer ha rivelato che non è bello farlo.

Va bene se creo il mio attributo personale, diciamo "messico" e assegno ad esso un valore numerico come "12", "6" ecc.?

Ecco perché voglio fare questo in modo che tu possa correggermi se sto facendo completamente sbagliato: Ho bisogno di accedere a questo numero nel mio JavaScript (usando jQuery). Prendendo semplicemente il valore dell'attributo è facile, ma estrarre il valore numerico da una stringa come "m12" o "m6" è un dolore. (Sono un principiante nel mondo JavaScript.)

risposta

90

C'è stata molta discussione su questo:

Alla fine della giornata, sono sul campo che crede attributi dei dati sono il modo migliore per andare. Sono stati introdotti in HTML5 per evitare conflitti di nome. In sostanza, se si desidera memorizzare i dati relativi nulla basta anteporre "data-" sul nome di attributo:

<div class="user" data-userid="5"></div> 

L'unico neo per il tutto è allora che il vostro XHTML non convaliderà, ma onestamente don non mi importa di quella roba. (Esatto, l'ho detto)

+9

+1. Sono completamente d'accordo che questo approccio è una soluzione operativa semplice da implementare e che non infrange nulla. Il pragmatismo sull'idealismo vince anche nel mio libro. – AnthonyWJones

+1

Vorrei andare con questo, dal momento che funziona oggi e dal momento che è nelle specifiche HTML5 probabilmente funzionerà tra 10 anni da oggi. Mantiene anche i dati indipendenti da altri valori (come tenerlo nell'attributo 'id', che potrebbe dover cambiare per altri motivi in ​​seguito) mentre lo si mantiene ancora sull'elemento. E sì, gli errori di convalida dell'HTML dovrebbero essere visti come consigli/indicatori di problemi, non errori di correzione (e mentre su quella pista, direi lo stesso per JSLint solo per rimescolare un po '=) – Blixt

+6

"Esatto, L'ho detto "il primo passo è ammetterlo. ;) – nickf

-8

No - it's not.

+0

Haters - quello che ho detto di sbagliato? Va bene se il sito non supera la convalida W3? –

+1

Ho votato questo * solo perché * Sento che è una risposta genuina; anche se azzarderei l'ipotesi che i voti negativi fossero dovuti a una mancanza di spiegazioni. E no, non penso che sia sufficiente fornire un collegamento. Credo che dovresti almeno riassumere la pagina a cui ti colleghi, anche se non scegli di spiegare * te *. –

+1

@Arnis: Potrebbe essere, potrebbe non esserlo, ma quanto sarebbe stato difficile per te includere quella piccola quantità di testo nella tua "risposta"? – AnthonyWJones

8

In HTML 5 è possibile aggiungere qualsiasi attributo a partire da data-, quindi ad es. <div data-messid="12"> è OK.

HTML 4 e XHTML 1 non si convalideranno se si aggiunge il proprio attributo, ma oltre a ciò non accadrà nulla di male se si sceglie il nome di attributo abbastanza unico (quindi non entrerà in conflitto con alcun attributo HTML corrente o futuro).

2

Uso gli attributi personalizzati e poiché sono supportati da tutti i browser selezionati, penso che non sia male utilizzarli. Puoi anche utilizzare tag HTML personalizzati per simulare HTML5, con alcuni hack di IE, quindi perché non utilizzare gli attributi, se non hanno bisogno di hack?

In ogni caso, si può leggere la discussione simile qui: Custom attributes - Yea or nay?

1

Questa non è una risposta definitiva, ma avendo avuto a che fare in passato posso dire che questo non solo funziona bene, è cross-browser amichevole.

5

Solo così si sa, si può facilmente estrarre un ID da una stringa del tipo M12 o m6, lo farei in questo modo:

//name the IDs m_12, m_3 etc 
var number = $('#someElement').attr('id').split('_')[1]; 

Se per esempio, si dispone di un mazzo di collegamenti con i numeri in l'ID come sopra, e tutti i link hanno la classe clickMe:

$('a.clickMe').click(function() { 
    alert($(this).attr('id').split('_')[1]); 
}); 
+0

Ecco come faccio di solito qualcosa se ho semplicemente un ID che voglio recuperare, ma a volte c'è di più. –

+0

Vorrei poter invitare solo una volta :) – codelame

1

Se si utilizza jQuery è possibile utilizzare .data per memorizzare informazioni personalizzate nei confronti di un elemento.

Il lato negativo di attributi personalizzati sono:

  • IE6 crea oggetti extra per memorizzare su misura 'expando' attributi questi hanno la tendenza a fuoriuscire soprattutto se vengono creati tramite script.

  • convalida emette

+0

Sto usando ASP.NET MVC e sto cercando di aggiungere l'attributo personalizzato "data-messid" usando il parametro htmlAttribs dei metodi helper html: new {@class = "mcf", data-dd = Html.AttributeEncode (m.ID)}. Ma non funziona (problema di sintassi). Vedo che sei attivo nel tag ASP.NET MVC, quindi per favore puoi aiutarmi come farlo? – Hemant

+0

Certo - chiedi un altro Q con un tag mvc asp.net – redsquare

+0

anche se quello che hai sembra corretto – redsquare

Problemi correlati