2009-03-03 9 views
13

Visual Studio no le gustan las etiquetas de anclaje on-page:¿El atributo 'nombre' está desactualizado para las etiquetas de anclaje <a>?

validación (XHTML 1.0 Transicional): atributo 'name' se considera obsoleta. Se recomienda una construcción más nueva .

Estoy usando name atributos de esta manera & 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> 

¿Existe realmente una forma más moderna de hacer esto? ¿O está Visual Studio lleno de basura?

Respuesta

21

En su lugar, debe usar el atributo id. Funciona de la misma manera, y que no es necesario un <a name=...> artificial, sino simplemente

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

¡NO ES VERDAD! El ID DEBE SER ÚNICO EN TODO EL DOCUMENTO, mientras que el nombre se puede compartir con muchos elementos. Además, getElementsByName devuelve una lista de elementos. getElementById solo devuelve 1 elemento individual. – hanshenrik

+0

@hanshenrik Esta respuesta no dice que siempre use 'id' en lugar de' name'. Por favor, tenga en cuenta las circunstancias descritas en la pregunta. Pregunta acerca de cómo vincular a una sección. Si tiene nombres duplicados, vincularlos no tiene sentido desde el principio. En cualquier caso, si desea identificar múltiples elementos para fines de programación, debe usar clases, no atributos de 'nombre'. – phihag

1

Creo que la manera correcta de hacerlo es < a id = "uno">

14

atributos de nombre están en desuso en XHTML 1.0 - se puede utilizar un atributo id de la misma manera, sin embargo, ver Fragment Identifiers en el HTML Compatibility Guidelines de la especificación XHTML.

Así puede simplemente usar

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

Pero tenga en cuenta que la especificación 1.0 recomienda jugar a lo seguro con algo como esto:

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

Sin embargo, el fragmento utiliza XHTML 1.1, donde el atributo nombre tiene sido entirely removed desde a y map elementos - por lo que solo puede usar una identificación.

+1

en realidad, el fragmento en la pregunta es XHTML 1.1, lo que significa que 'name' no sólo está en desuso, es llano ilegal. –

+0

Bien manchado, extrañé que estaba usando 1.1 - corregirá la respuesta –

+0

Supongo que 1.1 todavía tiene el atributo de nombre para la etiqueta de entrada, aunque ... No tengo tiempo para c diablos en este momento. – Powerlord

2

Creo que el enfoque moderno es usar el atributo id, que se evaluaría como un ancla. Por ejemplo, si ha cambiado

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

a

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

Usted igualmente abordar como page.html#one.

1

Sí, es obsoleta. Debe reemplazar con el atributo "id". página

w3schools Citando:

"El atributo id Sustituye el nombre del atributo HTML 4.01 define un atributo de nombre para los elementos a, applet, marco, iframe, img, y del mapa En XHTML el nombre. el atributo está en desuso. Use id en su lugar. "

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

2

También puede vincular en un encabezado de sección:

Tabla de Contenidos

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

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

1

name = atributos son para etiquetar elementos en un formulario, y solo se pueden usar en < form> elements (input, textarea, select etc). Para todo lo demás, ID = se usa. Exactamente por qué la gente de W3C pensó que se necesitaban dos formas diferentes de nombrar un elemento (con diferentes conjuntos de caracteres permitidos) no se conoce fácilmente.

1

Pero aquí http://www.w3.org/TR/html4/struct/links.html#h-12.2.3 Leí esto: "Algunos agentes de usuario más antiguos no son compatibles con los anclajes creados con el atributo id." ¿Asi que?

+0

Entonces, nadie debería estar usando esos agentes de usuario más antiguos; están llenos de agujeros de seguridad de todos modos. Y si usted, como desarrollador web, desea respaldar, por ejemplo, Netscape 4, tiene problemas mayores que los que un URI con un '#' no saltará a la ubicación correcta. –

+0

Sí, ahora es 2014, estoy de acuerdo – waanders

0

Hasta <a name="..."></a> ya no es soportado por el estándar (X) HTML que está utilizando - y no sólo en desuso - puede ser más segura de usar tanto name y id en los anclajes que unen a una parte de la misma página. A partir de los W3C's XHTML 1 spec:

En XML, Uri referencias RFC2396 que terminan con el fragmento identificadores de la forma "#foo" no se refieren a elementos con un atributo name="foo"; más bien, se refieren a elementos con un atributo definido como de tipo ID, por ejemplo, el atributo id en HTML 4. Muchos clientes HTML existentes no admiten el uso de atributos de tipo ID de esta manera, por lo que valores idénticos puede ser suministrado para ambos de estos atributos para asegurar la máxima hacia adelante y compatibilidad hacia atrás (por ejemplo, <a id="foo" name="foo">...</a>).

Cuestiones relacionadas