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.

È stato utile?

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 è

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,

http://meyerweb.com/eric/articles/webrev/199802a.html

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 :(

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top