Un elemento html può avere più ID?
-
08-07-2019 - |
Domanda
Comprendo che un ID deve essere univoco in una pagina HTML / XHTML.
La mia domanda è, per un dato elemento, posso assegnargli più ID?
<div id="nested_element_123 task_123"></div>
Mi rendo conto di avere una soluzione semplice usando semplicemente una classe. Sono solo curioso di usare gli ID in questo modo.
Soluzione
No. Dalle XHTML 1.0 Spec
In XML, gli identificatori di frammento sono di digitare ID e può esserci solo un singolo attributo di tipo ID per elemento. Pertanto, in XHTML 1.0 il l'attributo id è definito come di tipo ID. Al fine di garantire che XHTML 1.0 i documenti sono XML ben strutturati documenti, documenti XHTML 1.0 DEVONO utilizzare l'attributo id durante la definizione identificatori di frammenti sugli elementi elencati sopra. Vedi l'HTML Linee guida di compatibilità per informazioni su come garantire tali ancore sono retrocompatibili quando servono Documenti XHTML come tipo di supporto text / html.
Altri suggerimenti
Contrariamente a quanto affermato da tutti gli altri, la risposta corretta è SÌ
La Specifiche dei selettori è molto chiara al riguardo:
Se un elemento ha più attributi ID, tutti devono essere trattati come ID per quell'elemento ai fini del selettore ID. Tale situazione potrebbe essere raggiunta usando miscele di xml: id, DOM3 Core, DTD XML e conoscenza specifica dello spazio dei nomi.
Modifica
Giusto per chiarire: Sì, un elemento XHTML può avere più ID, ad esempio
<p id="foo" xml:id="bar">
ma non è possibile assegnare più ID allo stesso attributo id
utilizzando un elenco separato da spazi.
La mia comprensione è sempre stata:
-
Gli ID sono monouso e vengono applicati solo a un elemento ...
- Ciascuno è attribuito come identificatore univoco a (solo) un singolo elemento .
-
Le classi possono essere utilizzate più di una volta ...
- Possono quindi essere applicati a più di un elemento e in modo simile ma diverso, ci possono essere più di una classe (cioè più classi) per elemento .
No. Mentre definizione da w3c per HTML 4 non sembra esplicitamente coprire la tua domanda, definizione del nome e dell'attributo id non indica spazi nell'identificatore:
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 (" - quot;), trattini bassi (" _ "), due punti (": ") e punti (". ") .
No. Ogni elemento DOM, se ha un ID, ha un singolo ID univoco. Puoi approssimarlo usando qualcosa come:
<div id='enclosing_id_123'><span id='enclosed_id_123'></span></div>
, quindi utilizza la navigazione per ottenere ciò che desideri davvero.
Se stai solo cercando di applicare gli stili, i nomi delle classi sono migliori.
Puoi avere un solo ID per elemento, ma puoi effettivamente avere più di una classe. Ma non avere più attributi di classe, inserisci più valori di classe in un attributo.
<div id="foo" class="bar baz bax">
è perfettamente legale.
No, dovresti usare DIV nidificati se vuoi seguire quel percorso. Inoltre, anche se potessi, immagina la confusione che potrebbe causare quando avvii document.getElementByID (). Quale ID prenderà se ce ne sono più?
Su un argomento leggermente correlato, puoi aggiungere più classi a un DIV. Vedi la discussione di Eric Myers su,
No, non puoi avere più ID per un singolo tag, ma ho visto un tag con un attributo name
e un id
che sono trattati allo stesso modo da alcune applicazioni.
http: //www.w3. org / TR / REC-HTML40 / struct / global.html # h-7.5.2
L'attributo id assegna un identificatore unico a un elemento (che può essere verificato da un parser SGML).
e
I token ID e NAME devono iniziare con una lettera ([A-Za-z]) e possono essere seguito da un numero qualsiasi di lettere, cifre ([0-9]), trattini (" - "), underscore (" _ "), due punti (": ") e punti (". ").
Quindi " id " deve essere unico e non può contenere uno spazio.
No.
Detto questo, non c'è nulla che possa impedirti di farlo. Ma otterrai un comportamento incoerente con i vari browser. Non farlo 1 ID per elemento.
Se vuoi più assegnazioni a un elemento usa le classi (separate da uno spazio).
È interessante, ma per quanto ne so la risposta è un fermo no. Non vedo perché hai bisogno di un ID nidificato, poiché di solito lo attraversi con un altro elemento che ha lo stesso ID nidificato. Se non lo fai non ha senso, se lo fai c'è ancora poco punto.
So che ha un anno, ma ero curioso di questo e sono sicuro che altri troveranno la loro strada qui. La semplice risposta è no, come altri hanno già detto prima di me. Un elemento non può avere più di un ID e un ID non può essere utilizzato più di una volta in una pagina. Provalo e vedrai quanto non funziona.
In risposta alla risposta di tvanfosson sull'uso dello stesso ID in due elementi diversi. Per quanto ne so, un ID può essere utilizzato solo una volta in una pagina, indipendentemente dal fatto che sia associato a un tag diverso.
Per definizione, un elemento che necessita di un ID dovrebbe essere univoco, ma se hai bisogno di due ID non è univoco e necessita invece di una classe.
Vorrei dire tecnicamente sì, dal momento che ciò che viene reso dipende tecnicamente sempre dal browser. La maggior parte dei browser cerca di attenersi alle specifiche nel miglior modo possibile e per quanto ne so non c'è nulla nelle specifiche CSS contro di esso. Garantirò solo l'effettivo codice html, css, javascript che viene inviato al browser prima che intervenga qualsiasi altro interprete.
Tuttavia dico anche di no, dato che ogni browser su cui collaudo di solito non te lo consente. Se hai bisogno di vedere tu stesso, salva quanto segue come file .html e aprilo nei principali browser. In tutti i browser che ho testato sulla funzione javascript non corrisponderà a un elemento. Tuttavia, rimuovere & Quot; hunkojunk & Quot; dal tag id e tutto funziona bene. Codice di esempio
<html>
<head>
</head>
<body>
<p id="hunkojunk1 hunkojunk2"></p>
<script type="text/javascript">
document.getElementById('hunkojunk2').innerHTML = "JUNK JUNK JUNK JUNK JUNK JUNK";
</script>
</body>
</html>
le classi sono create appositamente per questo, ecco il codice da cui puoi capire
<html>
<head>
<style type="text/css">
.personal{
height:100px;
width: 100px;
}
.fam{
border: 2px solid #ccc;
}
.x{
background-color:#ccc;
}
</style>
</head>
<body>
<div class="personal fam x"></div>
</body>
</html>
Nay.
https: // www .w3.org / TR / 2011 / WD-html5-20110525 / elements.html # the-id-attributo
Il valore non deve contenere alcuno spazio.
id="a b"
< - trova il carattere spazio in quel VaLuE .
Detto questo, puoi definire più ID. Ma se stai seguendo le specifiche, la risposta è no.
Any ID assigned to a div element is unique.
However, you can assign multiple IDs "under", and not "to" a div element.
In that case, you have to represent those IDs as <span></span> IDs.
Say, you want two links in the same HTML page to point to the same div element in the page.
The two different links
<p><a href="#exponentialEquationsCalculator">Exponential Equations</a></p>
<p><a href="#logarithmicExpressionsCalculator"><Logarithmic Expressions</a></p>
Point to the same section of the page.
<!-- Exponential / Logarithmic Equations Calculator -->
<div class="w3-container w3-card white w3-margin-bottom">
<span id="exponentialEquationsCalculator"></span>
<span id="logarithmicEquationsCalculator"></span>
</div>
Io non & # 180; t penso che tu possa avere due Id & # 180; s ma dovrebbe essere possibile. Usare lo stesso ID due volte è un caso diverso ... come due persone che usano lo stesso passaporto. Tuttavia, una persona potrebbe avere più passaporti ... È venuto a cercarlo poiché ho una situazione in cui un singolo dipendente può avere diverse funzioni. Pronuncia & Quot; sysadm & Quot; e " coordinatore del team " avendo l'id = " sysadm teamcoordinator " mi farebbe riferimento a loro da altre pagine in modo che dipendenti.html # sysadm e impiegati.html # teamcoordinator porterebbero allo stesso posto ... Un giorno qualcun altro potrebbe assumere la funzione di coordinatore del team mentre il sysadm rimane il sysadm ... quindi devo solo cambiare gli ID nella pagina dipendenti.html ... ma come ho detto - non funziona & # 180; t :(