2009-03-03 8 views
13

Visual Studio non piace sulla pagina tag di ancoraggio:L'attributo 'nome' è considerato obsoleto per i tag di ancoraggio <a>?

Validation (XHTML 1.0 Transitional): attributo 'name' è considerato obsoleto. Un nuovo costrutto è raccomandato.

Sto utilizzando gli attributi name in questo modo & hellip;

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd" xml:lang="en"> 
    ... 
    <body> 
     ... 
     <p>On this page&hellip;</p> 
     <ul> 
      <li><a href="#one">Section One</a></li> 
      ... 
     </ul> 
     ... 
     <h2><a name="one">Section One</a></h2> 
     ... 
    </body> 
</html> 

C'è davvero un modo più moderno di farlo? O Visual Studio è pieno di merda?

risposta

21

Utilizzare invece l'attributo id. Funziona allo stesso modo, e non hai bisogno di un artificiale <a name=...>, ma semplicemente

<h2 id="one">Section One</h2> 
+0

NON VERO! L'ID DEVE ESSERE UNICO PER TUTTO IL DOCUMENTO, mentre il nome può essere condiviso con molti elementi. inoltre, getElementsByName restituisce un elenco di elementi. getElementById restituisce solo 1 elemento singolo. – hanshenrik

+0

@hanshenrik Questa risposta non dice di usare sempre 'id' invece di' nome'. Si prega di prendere nota delle circostanze descritte nella domanda. Si chiede come collegare a una sezione. Se hai nomi duplicati, il collegamento ad essi non ha senso in primo luogo. In ogni caso, se vuoi identificare più elementi per scopi di programmazione, dovresti usare le classi, non gli attributi 'name'. – phihag

1

Credo che il modo corretto per farlo è < un id = "uno">

14

attributi di nomi sono obsoleti in XHTML 1.0 - è possibile utilizzare un attributo id nello stesso modo, però, vedere Fragment Identifiers nel HTML Compatibility Guidelines di la specifica XHTML.

Così si può semplicemente utilizzare

<h2><a id="one">Section One</a></h2> 

Ma nota che la specifica 1.0 raccomanda di giocare sul sicuro con qualcosa di simile:

<h2><a name="one" id="one">Section One</a></h2> 

Tuttavia, il frammento utilizza XHTML 1.1, in cui l'attributo nome ha stato entirely removed da a e map elementi - quindi è possibile utilizzare solo un id.

+1

in realtà, il frammento in questione è XHTML 1.1, il che significa che 'name' non è solo obsoleto, è chiaro –

+0

Ben avvistato, mi sono perso che stava usando 1.1 - Modificherà la risposta –

+0

Suppongo che 1.1 abbia ancora l'attributo name per il tag di input, anche se ... Non ho tempo per c diamine al momento. – Powerlord

2

Credo che l'approccio moderno sia quello di utilizzare l'attributo id, che verrebbe valutato come un ancoraggio. Ad esempio, se è stato modificato

<h2><a name="one">Section One</a></h2> 

a

<h2><a id="one">Section One</a></h2> 

Si potrebbe ancora affrontare come page.html#one.

1

Sì, è obsoleto. Dovresti sostituire con l'attributo "id". pagina

citare w3schools:

"l'attributo ID sostituisce il nome Abilità HTML 4.01 definisce un attributo nome per gli elementi a, applet, frame, iframe, img, e mappa In XHTML nome. l'attributo è deprecato. Utilizza invece l'id. "

http://www.w3schools.com/Xhtml/xhtml_syntax.asp

2

È inoltre possibile collegare su un'intestazione di sezione:

Sommario

<P> 
    <A href="#section1">Introduction</A><BR> 
    <A href="#section2">Some background</A><BR> 
    <A href="#section2.1">On a more personal note</A><BR> 
    ...the rest of the table of contents... 
    ...the document body... 

    <H2 id="section1">Introduction</H2> 
    ...section 1... 

    <H2 id="section2">Some background</H2> 
    ...section 2... 

    <H3 id="section2.1">On a more personal note</H3> 
    ...section 2.1... 

[...] 
</P> 

Fonte: http://www.w3.org/TR/REC-html40/struct/links.html

1

name = attributi sono per etichettare gli elementi in un modulo e possono essere usati solo su < forma> elementi (input, textarea, select etc). Per tutto il resto, ID = è usato. È esattamente il motivo per cui la gente del W3C riteneva che due diversi modi di nominare un elemento (con diversi insiemi di caratteri consentiti) fossero necessari non è noto prontamente.

1

Ma qui http://www.w3.org/TR/html4/struct/links.html#h-12.2.3 Ho letto questo: "Alcuni vecchi programmi utente non supportano ancore create con l'attributo id." Così?

+0

Quindi nessuno dovrebbe usare più quei vecchi user-agent; sono comunque pieni di buchi di sicurezza. E se tu come webdeveloper vuoi supportare, ad esempio, Netscape 4, hai problemi più grandi di quello che un URI con un '#' non salterà nella posizione corretta. –

+0

Sì, ora è già il 2014, sono d'accordo – waanders

0

Fino <a name="..."></a> non è più supportato dallo standard (X) HTML in uso - e non solo deprecato - può essere più sicuro utilizzare sia name e id sulle ancore con link a una parte della stessa pagina. Dalle W3C's XHTML 1 spec:

In XML, URI riferimenti RFC2396 che terminano con frammento identificatori della forma "#foo" non si riferiscono ad elementi con un attributo name="foo"; piuttosto, si riferiscono a elementi con un attributo definito come ID tipo, ad esempio l'attributo id in HTML 4. Molti client HTML esistenti non supportano l'uso di attributi di tipo ID in questo modo, quindi valori identici possono essere forniti per entrambi questi attributi per garantire la massima avanti e indietro compatibilità (es <a id="foo" name="foo">...</a>).