2010-06-06 9 views
6

Ho lavorato con una nuova installazione del software wiki "MoinMoin". Mentre ero a giocare con esso, digitando pagine di prova per lo più casuali, ho creato un collegamento con un frammentoSemantica "identificatore di frammento" URL per documenti HTML

blah blah see also [[SomeStuff#whatever|some other stuff about whatever]] 

Poi ho bisogno di capire come creare l'ancora per quel "qualunque" identificatore di frammento. Non ricordo di avere a che fare con quel MediaWiki, così ho dovuto scavare in giro, ma alla fine ho scoperto che MoinMoin ha una macro "Anchor":

== Whatever == 
<<Anchor(whatever)>> 

Guardando il codice HTML generato, sono stato sorpreso di vedere un tag vuoto <span> con un valore "id" di "qualunque". Mi aspettavo che sarebbe stato un tag <a> con un attributo "nome" di "qualunque cosa". Ho scavato e trovato la fonte, e c'è un commento che dice di averlo modificato da un tag <a> per evitare alcuni problemi di IE con le sezioni <pre>. Questo mi ha confuso con lo — non per la cosa di IE, ma perché mi sembrava che la loro "correzione" avesse lasciato completamente rotto l'intero meccanismo di ancoraggio.

Con mia grande sorpresa, tuttavia, ulteriori test hanno indicato che ha funzionato bene. Ho scritto una pagina di prova con 300 tag <span> tutti con valori di "id", e mi sono ulteriormente scioccato quando Firefox si è comportato esattamente come mi sarei aspettato che avessi usato i tag <a>. Ha funzionato anche quando ho modificato tutti i tag <span> in <em>.

Quindi a quest'ora, sei sorpreso tanto quanto me, oppure stai pensando "come può qualcuno così stupido avere così tanti punti reputazione?" Se sei nella seconda categoria, è davvero il caso che sto scrivendo in HTML da circa 15 anni ora — a lotto di HTML — ed è in qualche modo sfuggito alla mia comunicazione che i browser utilizzano il frammento HTML per trovare qualsiasi tipo di elemento con un "id" corrispondente?

stato mente: soffiato

risposta

4

Bene HTML 4.01 è abbastanza chiaro ...

12.2.3 Anchors with the id attribute 

The id attribute may be used to create an anchor at the start tag of any element 
(including the A element). 

This example illustrates the use of the id attribute to position an anchor in an 
H2 element. The anchor is linked to via the A element. 

You may read more about this in <A href="#section2">Section Two</A>. 
...later in the document 
<H2 id="section2">Section Two</H2> 
...later in the document 
<P>Please refer to <A href="#section2">Section Two</A> above 
for more details. 

Se si tratta di una consolazione, non siete soli. Qualcuno ha recentemente commentato un'altra mia risposta su SO, dicendo la stessa cosa.

E 'iniziato con HTML 4, quindi se hai imparato il tuo codice HTML prima del 1998/9, la modifica non era importante rispetto alle altre modifiche e quindi non la cosa più semplice da notare. Non ho iniziato a imparare l'HTML fino al 2001, quindi HTML 4 è ​​stato il punto di partenza.

+0

OK, bene questo lo risolve! Grazie. E sì, ho "imparato" l'HTML qualche tempo fa e non sono più tornato a studiare le minuzie da allora per cose che pensavo di aver capito completamente! – Pointy

1

Non sapevo nemmeno questo. È ufficiale, però. Dal HTML 4.01 spec:

Destinazione possono essere specificati ancore nei documenti HTML o dall'elemento A (denominazione con l'attributo name), o da qualsiasi altro elemento (denominazione con l'attributo id).

Wikipedia sapevano troppo:

Nelle applicazioni HTML, http://www.foo.org/foo.html#bar riferisce all'elemento con l'attributo id che ha la barra valore (cioè, id = "bar") nel documento identificato dal URI http://www.foo.org/foo.html, che è in genere la posizione da cui il documento verrebbe ottenuto via Internet. Anche l'attributo del nome deprecato può essere utilizzato per questo scopo nello stesso modo.

Problemi correlati