Quali sono i valori validi per l'attributo id in HTML?


2016

Quando si creano gli idattributi per gli elementi HTML, quali sono le regole per il valore?


96
Ciò differisce tra HTML5 e le versioni precedenti delle specifiche. L'ho spiegato qui: mathiasbynens.be/notes/html5-id-class
Mathias Bynens

5
Ho notato che SharePoint 2010 assegnava un valore come questo - {8CC7EF38-31D8-4786-8C20-7E6D56E49AE2} - {E60CE5E2-6E64-4350-A884-654B72DA5A53} per una tabella generata dinamicamente all'interno di una web part e una pagina contenente un valore ID di quel tipo non si è rotto in nessuno dei browser più diffusi. Gestire tali valori ID tramite JavaScript è tuttavia complicato - mvark.blogspot.in/2012/07/…
mvark

3
I requisiti HTML4 e HTML5 per i IDvalori sono molto diversi. Ecco un riassunto rapido e completo delle IDregole HTML5 : stackoverflow.com/a/31773673/3597276
Michael Benjamin,

5
Nota: facendo come hanno detto alcune delle risposte e usando un punto ( **.**)con jQuery potresti avere un bel po 'di problemi, ad esempio usare <input id="me.name" />e quindi $("#me.name").val()far sì che jQuery cerchi un <me>tag con la classe .name, che nessuno vuole davvero!
Can O 'Spam,

3
@SamSwift 웃 No, devi solo scappare da personaggi speciali come dicono i documenti . Si prega di controllare questa demo online .
Álvaro González,

Risposte:


1703

Per HTML 4 , la risposta è tecnicamente:

I token ID e NAME devono iniziare con una lettera ([A-Za-z]) e possono essere seguiti da un numero qualsiasi di lettere, cifre ([0-9]), trattini ("-"), caratteri di sottolineatura ("_") , due punti (":") e punti (".").

HTML 5 è ancora più permissivo, dicendo solo che un id deve contenere almeno un carattere e non può contenere spazi.

L'attributo id fa distinzione tra maiuscole e minuscole in XHTML .

Come questione puramente pratica, potresti voler evitare determinati personaggi. Periodi, due punti e '#' hanno un significato speciale nei selettori CSS, quindi dovrai sfuggire a quei caratteri usando una barra rovesciata in CSS o una barra rovesciata doppia in una stringa di selezione passata a jQuery . Pensa a quanto spesso dovrai sfuggire a un personaggio nei tuoi fogli di stile o nel tuo codice prima di impazzire con punti e due punti in ID.

Ad esempio, la dichiarazione HTML <div id="first.name"></div>è valida. Puoi selezionare quell'elemento nei CSS come #first\.namee in jQuery in questo modo: $('#first\\.name').Ma se dimentichi la barra rovesciata, $('#first.name')avrai un selettore perfettamente valido che cerca un elemento con id firste che ha anche classe name. Questo è un bug che è facile da trascurare. A lungo termine potresti essere più felice scegliendo l'id first-name(un trattino anziché un punto).

È possibile semplificare le attività di sviluppo attenendosi rigorosamente a una convenzione di denominazione. Ad esempio, se ti limiti interamente ai caratteri minuscoli e separi sempre le parole con trattini o caratteri di sottolineatura (ma non entrambi, scegli uno e non usare mai l'altro), allora hai un modello facile da ricordare. Non ti chiederai mai "era firstNameo FirstName?" perché saprai sempre che dovresti digitare first_name. Preferisci la custodia per cammelli? Quindi limitati a questo, senza trattini o caratteri di sottolineatura, e usa sempre, sia maiuscolo che minuscolo per il primo personaggio, non mescolarli.


Un problema ora molto oscuro era che almeno un browser, Netscape 6, trattava erroneamente i valori degli attributi id come case sensitive . Ciò significa che se avessi digitato il id="firstName"tuo HTML (minuscola 'f') e il #FirstName { color: red }tuo CSS (maiuscola 'F'), quel browser buggy non sarebbe riuscito a impostare il colore dell'elemento su rosso. Al momento di questa modifica, aprile 2015, spero che non ti venga chiesto di supportare Netscape 6. Considera questa una nota storica.


78
Si noti che gli attributi di classe e id fanno distinzione tra maiuscole e minuscole in XHTML, tutti gli altri attributi no. Eric Meyer ne ha parlato in un seminario CSS a cui ho partecipato.
John Topley,

31
Si noti inoltre che se si tenta di scrivere una regola CSS per indirizzare un elemento in base all'ID e gli esseri ID con un numero, non funzionerà. Bummer!
Zack The Human,

55
Quanto a '.' o ':' in un ID usando jQuery, consultare le FAQ di jQuery . Contiene una piccola funzione che esegue la fuga necessaria.
Wolfram,

7
L' idattributo è [ w3.org/TR/html4/struct/global.html#adef-id×(cassa sensibile in HTML4) e deve iniziare con una lettera (limitata da A a Z). Nota anche che il tuo esempio non dovrebbe rendere rosso il colore del testo del tuo elemento poiché il tuo CSS si riferisce a un elemento con classe FirstNamenon alla tua id.
Augustus Kling,

5
L'errore che Augustus ha sottolineato è ancora presente. Nel tuo esempio, se hai id="firstName"in HTML 4 o HTML 5 e #FirstName { color: red }in CSS, solo un browser difettoso imposterà il colore dell'elemento su rosso.
Stephen Booher,

221

Dalla specifica HTML 4 :

I token ID e NAME devono iniziare con una lettera ([A-Za-z]) e possono essere seguiti da un numero qualsiasi di lettere, cifre ([0-9]), trattini ("-"), caratteri di sottolineatura ("_") , due punti (":") e punti (".").

Un errore comune è utilizzare un ID che inizia con una cifra.


20
Si noti che HTML5 consente molto più di HTML4, ad esempio 456bereastreet.com/archive/201011/… e w3.org/TR/html5/elements.html#the-id-attribute
Mr Shark,

IE6 non supportava l'ID a partire da caratteri di sottolineatura, ma è comunque morto.
doc_id

2
@rahmanisback per quanto riguarda IE6, si sarebbe pensato così, ma sto finendo una proposta per una banca e insistono sul fatto che qualsiasi applicazione sviluppata da un fornitore viene eseguita in IE6. Questo è per 30.000 utenti. Diamine, se potessimo semplicemente far loro aggiornare il proprio browser su tutti quei desktop, potrebbe solo aiutare il tasso di disoccupazione.
Karl,

2
@Karl Mi dispiace sentirlo. Fai tutto il possibile per mettere in guardia dai problemi di sicurezza di IE6. Tuttavia IE7 sarà presto il nuovo IE6, quindi sì, sembra che sia il nostro destino in questo settore a porre rimedio agli errori passati della SM.
doc_id

@MrShark Il secondo collegamento è interrotto; Nuovo link
SWdV,

155

È possibile utilizzare tecnicamente due punti e punti negli attributi id / name, ma suggerirei vivamente di evitare entrambi.

Nei CSS (e in diverse librerie JavaScript come jQuery), sia il punto che i due punti hanno un significato speciale e incontrerai problemi se non stai attento. I periodi sono selettori di classe e i due punti sono pseudo-selettori (ad esempio, ": hover" per un elemento quando il mouse è sopra di esso).

Se dai a un elemento l'id "my.cool:thing", il tuo selettore CSS sarà simile al seguente:

#my.cool:thing { ... /* some rules */ ... }

Il che sta veramente dicendo "l'elemento con un id di" mio ", una classe di" cool "e lo pseudo-selettore" cosa "in CSS.

Attenersi alla AZ di qualsiasi caso, numeri, trattini bassi e trattini. E come detto sopra, assicurati che i tuoi ID siano unici.

Questa dovrebbe essere la tua prima preoccupazione.


21
Puoi usare due punti e punti - ma dovrai scapparli usando doppie barre rovesciate, ad esempio: $ ('# my \\. Cool \\: thing') o sfuggire a una variabile: $ ('#' + id.replace (/ \ ./, '\\.'). sostituisci (/ \: /, '\\:')) groups.google.com/group/jquery-en/browse_thread/thread/…
joeformd

2
Perché non i numeri; perché solo AZ? I numeri sono ID molto utili quando si fa riferimento a elementi correlati a dati codificati con un numero, purché non si inizi con il numero.
cori,

4
Cordiali saluti, trattini sono tecnicamente trattini. Il segno meno non è nel set di caratteri ASCII. en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes
Anton Strogonoff

4
Se hai questi caratteri ( ., :) negli ID e non riesci a rimuoverli (tosse ... Sharepoint), puoi aggirarli in CSS con selettori di attributi anziché selettori di ID, ad esempio [id='my.cool:thing'], tuttavia questo selettore avrà una specificità inferiore rispetto a un selettore id, che potrebbe causare altri problemi.
Faust,

2
Vecchio, lo so, ma aggiornato per includere numeri e backpedal su trattini
Michael Thompson,

67

jQuery fa gestire qualsiasi nome di documento d'identità valido. Hai solo bisogno di sfuggire ai metacaratteri (cioè punti, punti e virgola, parentesi quadre ...). È come dire che JavaScript ha un problema con le virgolette solo perché non puoi scrivere

var name = 'O'Hara';

Selettori nell'API jQuery (vedi nota in basso)


66

Dovrebbe corrispondere rigorosamente

[A-Za-z][-A-Za-z0-9_:.]*

Ma jquery sembra avere problemi con i due punti, quindi potrebbe essere meglio evitarli.


2
O in alternativa: "quindi potrebbe essere meglio evitare jquery". ;)
domsson

59

HTML5:

elimina le restrizioni aggiuntive sull'attributo id vedi qui . Gli unici requisiti rimasti (oltre ad essere univoci nel documento) sono:

  1. il valore deve contenere almeno un carattere (non può essere vuoto)
  2. non può contenere caratteri spaziali.

PRE-HTML5:

L'ID deve corrispondere:

[A-Za-z][-A-Za-z0-9_:.]*
  1. Deve iniziare con caratteri AZ o az
  2. Può contenere -(trattino), _(trattino basso), :(due punti) e .(punto)

ma si dovrebbe evitare :e .perché:

Ad esempio, un ID potrebbe essere etichettato "ab: c" e referenziato nel foglio di stile come #ab: c ma oltre ad essere l'id per l'elemento, potrebbe significare id "a", classe "b", pseudo- selettore "c". Meglio evitare la confusione e stare lontano dall'uso. e: complessivamente.


57

HTML5: valori consentiti per attributi ID e classe

A partire da HTML5, le uniche restrizioni sul valore di un ID sono:

  1. deve essere unico nel documento
  2. non deve contenere alcuno spazio
  3. deve contenere almeno un carattere

Regole simili si applicano alle classi (ad eccezione dell'unicità, ovviamente).

Quindi il valore può essere composto da tutte le cifre, solo una cifra, solo caratteri di punteggiatura, inclusi caratteri speciali, qualunque cosa. Solo nessuno spazio bianco. Questo è molto diverso da HTML4.

In HTML 4, i valori ID devono iniziare con una lettera, che può essere seguita solo da lettere, cifre, trattini, caratteri di sottolineatura, due punti e punti.

In HTML5 sono validi:

<div id="999"> ... </div>
<div id="#%LV-||"> ... </div>
<div id="____V"> ... </div>
<div id="⌘⌥"> ... </div>
<div id="♥"> ... </div>
<div id="{}"> ... </div>
<div id="©"> ... </div>
<div id="♤₩¤☆€~¥"> ... </div>

Basta tenere presente che l'uso di numeri, punteggiatura o caratteri speciali nel valore di un ID può causare problemi in altri contesti (ad es. CSS, JavaScript, regex).

Ad esempio, il seguente ID è valido in HTML5:

<div id="9lions"> ... </div>

Tuttavia, non è valido nei CSS:

Dalle specifiche CSS2.1:

4.1.3 Personaggi e caso

Nel CSS, gli identificatori (inclusi nomi di elementi, classi e ID nei selettori) possono contenere solo i caratteri [a-zA-Z0-9] e ISO 10646 caratteri U + 00A0 e versioni successive, oltre il trattino (-) e il trattino basso ( _); non possono iniziare con una cifra, due trattini o un trattino seguito da una cifra .

Nella maggior parte dei casi potresti essere in grado di sfuggire ai personaggi in contesti in cui hanno restrizioni o significati speciali.


Riferimenti W3C

HTML5

3.2.5.1 L' id attributo

L' idattributo specifica l'identificatore univoco (ID) del suo elemento.

Il valore deve essere univoco tra tutti gli ID nella sottostruttura principale dell'elemento e deve contenere almeno un carattere. Il valore non deve contenere alcuno spazio.

Nota: non ci sono altre restrizioni su quale forma può assumere un ID; in particolare, gli ID possono consistere di sole cifre, iniziare con una cifra, iniziare con un carattere di sottolineatura, consistere solo di punteggiatura, ecc.

3.2.5.7 L' class attributo

L'attributo, se specificato, deve avere un valore che è un insieme di token separati da spazio che rappresentano le varie classi a cui appartiene l'elemento.

Le classi che gli sono state assegnate da un elemento HTML sono costituite da tutte le classi restituite quando il valore dell'attributo class viene suddiviso in spazi. (I duplicati vengono ignorati.)

Non ci sono restrizioni aggiuntive sui token che gli autori possono usare nell'attributo class, ma gli autori sono incoraggiati a usare valori che descrivono la natura del contenuto, piuttosto che valori che descrivono la presentazione desiderata del contenuto.


34

In pratica molti siti usano idattributi che iniziano con i numeri, anche se tecnicamente questo non è un HTML valido.

La specifica di bozza HTML 5 allenta le regole per gli attributi ide name: ora sono solo stringhe opache che non possono contenere spazi.


32

Trattini, trattini bassi, punti, due punti, numeri e lettere sono tutti validi per l'uso con CSS e JQuery. Quanto segue dovrebbe funzionare ma deve essere univoco in tutta la pagina e deve anche iniziare con una lettera [A-Za-z].

Lavorare con due punti e punti richiede un po 'più di lavoro, ma puoi farlo come mostra il seguente esempio.

<html>
<head>
<title>Cake</title>
<style type="text/css">
    #i\.Really\.Like\.Cake {
        color: green;
    }
    #i\:Really\:Like\:Cake {
        color: blue;
    }
</style>
</head>
<body>
    <div id="i.Really.Like.Cake">Cake</div>
    <div id="testResultPeriod"></div>

    <div id="i:Really:Like:Cake">Cake</div>
    <div id="testResultColon"></div>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
            var testPeriod = $("#i\\.Really\\.Like\\.Cake");
            $("#testResultPeriod").html("found " + testPeriod.length + " result.");

            var testColon = $("#i\\:Really\\:Like\\:Cake");
            $("#testResultColon").html("found " + testColon.length + " result.");
        });
    </script>
</body>
</html>

25

HTML5

Tenendo presente che l'ID deve essere univoco, ad es. non devono esserci più elementi in un documento con lo stesso valore ID.

Le regole sul contenuto ID in HTML5 sono (oltre ad essere univoche):

This attribute's value must not contain white spaces. [...] 
Though this restriction has been lifted in HTML 5, 
an ID should start with a letter for compatibility.

Questa è la specifica W3 sull'ID (da MDN):

Any string, with the following restrictions:
must be at least one character long
must not contain any space characters
Previous versions of HTML placed greater restrictions on the content of ID values 
(for example, they did not permit ID values to begin with a number).

Ulteriori informazioni:

  • W3 - attributi globali (id)
  • MDN atribute (id)

18

Per fare riferimento a un ID con un punto in esso è necessario utilizzare una barra rovesciata. Non sono sicuro che sia lo stesso per trattini o caratteri di sottolineatura. Ad esempio: HTML

<div id="maintenance.instrumentNumber">############0218</div>

CSS

#maintenance\.instrumentNumber{word-wrap:break-word;}

3
I trattini e i trattini bassi normalmente non devono essere sfuggiti. Tuttavia, l'eccezione a ciò è se il trattino appare all'inizio dell'identificatore ed è seguito da un altro trattino (ad es. \--abc) O da una cifra (ad es. \-123).
Mr White

16

Dalle specifiche HTML 4 ...

I token ID e NAME devono iniziare con una lettera ([A-Za-z]) e possono essere seguiti da un numero qualsiasi di lettere, cifre ([0-9]), trattini ("-"), caratteri di sottolineatura ("_") , due punti (":") e punti (".").

EDIT: d'oh! Picchiato di nuovo sul pulsante!


16

Inoltre, non dimenticare mai che un ID è unico. Una volta utilizzato, il valore ID potrebbe non essere più visualizzato in nessun punto del documento.

Potresti avere molti ID, ma tutti devono avere un valore univoco.

D'altra parte, c'è l'elemento class. Proprio come ID, può apparire più volte, ma il valore può essere utilizzato più volte.


12

Un identificatore univoco per l'elemento.

Non ci devono essere più elementi in un documento con lo stesso valore ID.

Qualsiasi stringa, con le seguenti restrizioni:

  1. deve essere lungo almeno un personaggio
  2. non deve contenere caratteri di spazio:

    • U + 0020 SPACE
    • U + 0009 TABULAZIONE CARATTERI (scheda)
    • U + 000A LINE FEED (LF)
    • U + 000C FORM FEED (FF)
    • U + 000D RITORNO DEL CARRELLO (CR)

L'uso dei caratteri tranne ASCII letters and digits, '_', '-' and '.'può causare problemi di compatibilità, in quanto non consentiti HTML 4. Sebbene questa limitazione sia stata revocata HTML 5, un ID dovrebbe iniziare con una lettera per la compatibilità.



10

per HTML5

Il valore deve essere univoco tra tutti gli ID nella sottostruttura principale dell'elemento e deve contenere almeno un carattere. Il valore non deve contenere alcuno spazio.

Almeno un personaggio, nessuno spazio.

Questo apre le porte a casi d'uso validi come l'uso di caratteri accentati. Ci dà anche molte più munizioni per spararci ai piedi, poiché ora puoi usare valori ID che causeranno problemi con CSS e JavaScript a meno che tu non sia davvero attento.


9
  1. Gli ID sono più adatti per la denominazione di parti del layout, quindi non devono dare lo stesso nome per ID e classe
  2. ID consente caratteri alfanumerici e speciali
  3. ma evitare l'uso di # : . * !simboli
  4. spazi non ammessi
  5. non iniziato con numeri o un trattino seguito da una cifra
  6. che tiene conto del maiuscolo o minuscolo
  7. l'utilizzo dei selettori ID è più rapido dell'utilizzo dei selettori di classe
  8. usa il trattino "-" (il carattere di sottolineatura "_" può anche usare ma non va bene per seo) per nomi CSS lunghi di classi Id o
  9. Se una regola ha un selettore ID come selettore chiave, non aggiungere il nome del tag alla regola. Poiché gli ID sono univoci, l'aggiunta di un nome tag rallenterebbe inutilmente il processo di corrispondenza.
  10. In HTML5, l'attributo id può essere utilizzato su qualsiasi elemento HTML e in HTML 4.01, l'attributo id non può essere utilizzato con: <base>, <head>, <html>, <meta>, <param>, <script>, <style>, and <title>.

"Il carattere di sottolineatura può anche usare ma non va bene per seo": Da quando i motori di ricerca si sono interessati alla classe CSS o ai nomi ID?
Nick Rice,

9

Qualsiasi valore alfanumerico e " - " e " _ " è valido. Tuttavia, dovresti iniziare il nome ID con qualsiasi carattere tra AZ o az .


6

Nessuno spazio, deve iniziare con almeno un carattere dalla a alla z e da 0 a 9.


4

In HTML

L'ID dovrebbe iniziare con {AZ} o {az} è possibile aggiungere cifre, punto, trattino, trattino basso, due punti.

Per esempio:

<span id="testID2"></span>
<span id="test-ID2"></span>
<span id="test_ID2"></span>
<span id="test:ID2"></span>
<span id="test.ID2"></span>

Ma anche se puoi creare un ID con due punti (:) o punto (.) È difficile per i CSS utilizzare questi ID come selettore. Principalmente quando si desidera utilizzare gli pseudo elementi (: before,: after).

Anche in JS è difficile selezionare questi ID. Quindi dovresti usare i primi quattro ID Come preferito da molti sviluppatori in giro e se è necessario di quanto puoi usare anche gli ultimi due.


4

i valori possono essere: [az], [AZ], [0-9], [* _: -]

è usato per HTML5 ...

possiamo aggiungere id con qualsiasi tag.


2

Dal momento che ES2015 possiamo anche usare quasi tutti i caratteri unicode per gli ID, se il set di documenti è impostato su UTF8.

Prova qui: https://mothereff.in/js-variables

inserisci qui la descrizione dell'immagine

Leggi: https://mathiasbynens.be/notes/javascript-identifiers-es6

In ES2015, gli identificatori devono iniziare con $, _ o qualsiasi simbolo con la proprietà principale derivata Unicode ID_Start.

Il resto dell'identificatore può contenere $, _, U + 200C non-joiner di larghezza zero, U + 200D zero-joiner di larghezza zero o qualsiasi simbolo con la proprietà core derivata Unicode ID_Continua.

const target = document.querySelector("div").id
console.log(
   target
)
document.getElementById(target).style.backgroundColor = "black"
div {
  border: 1px black solid;
  width: 100%;
  height: 200px
}
<div id="H̹̙̦̮͉̩̗̗ͧ̇̏̊̾Eͨ͆͒̆ͮ̃͏̷̮̣̫̤̣Cͯ̂͐͏̨̛͔̦̟͈̻O̜͎͍͙͚̬̝̣̽ͮ͐͗̀ͤ̍̀͢M̴̡̲̭͍͇̼̟̯̦̉̒͠Ḛ̛̙̞̪̗ͥͤͩ̾͑̔͐ͅṮ̴̷̷̗̼͍̿̿̓̽͐H̙̙̔̄͜">


Dovresti usarlo? Probabilmente non una buona idea!

Leggi: https://stackoverflow.com/a/52799593/2494754


-4

alfabeti-> maiuscole e minuscole-
> 0-9 caratteri
speciali-> ':', '-', '_', '.'

il formato dovrebbe essere a partire da "." o un alfabeto, seguito da uno dei caratteri speciali di più alfabeti o numeri. il valore del campo ID non deve terminare con un '_'.
Inoltre, gli spazi non sono ammessi, se forniti, vengono trattati come valori diversi, il che non è valido nel caso degli attributi id.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.