2009-03-03 8 views
13

Visual Studio nie lubi tagów kotwicy na stronie:Czy atrybut "nazwa" jest przestarzały dla znaczników zakotwiczonych <a>?

Validation (XHTML 1.0 Transitional): Atrybut 'name' jest uważany nieaktualne. Nowsza konstrukcja jest zalecana jako .

Używam atrybutów name w ten sposób & 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> 

Czy istnieje naprawdę nowocześniejszy sposób robienia tego? A może Visual Studio jest pełne bzdur?

Odpowiedz

21

Zamiast tego należy użyć atrybutu id. Działa w ten sam sposób, a ty nie potrzebujesz Sztuczna <a name=...>, ale po prostu

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

NIE PRAWDA! id MUSI BYĆ UNIKALNY W CAŁYM DOKUMENCIE, a nazwisko może być współużytkowane z wieloma elementami. również, getElementsByName zwraca listę elementów. getElementById zwraca tylko 1 pojedynczy element. – hanshenrik

+0

@hanshenrik Ta odpowiedź nie mówi, aby zawsze używać "id" zamiast "name". Proszę zanotować okoliczności opisane w pytaniu. Pyta o link do sekcji. Jeśli masz zduplikowane nazwy, linkowanie do nich jest bez znaczenia. W każdym razie, jeśli chcesz zidentyfikować wiele elementów do celów programowania, powinieneś użyć klas, a nie atrybutów "nazwa". – phihag

1

wierzę właściwy sposób, aby to zrobić jest < a id = „jeden”>

14

nazwa atrybuty są przestarzałe w XHTML 1.0 - można użyć atrybutu id w ten sam sposób, choć, zobacz Fragment Identifiers w HTML Compatibility Guidelines z specyfikacja XHTML.

Więc może po prostu użyć

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

Należy jednak pamiętać, że 1,0 Spec zaleca grać to bezpieczne coś takiego:

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

Jednak Twój fragment wykorzystuje XHTML 1.1, gdzie atrybut NAME zostały entirely removed z elementów a i map - możesz więc użyć tylko identyfikatora.

+1

Faktycznie, fragment w tej kwestii jest XHTML 1.1, co oznacza, że ​​'name' nie tylko przestarzałe, to zwykły nielegalne –

+0

Dobrze zauważyłem, brakowało mi, że używał 1.1 - poprawi odpowiedź –

+0

Zakładam, że 1.1 nadal ma atrybut nazwy dla tagu wejściowego, chociaż ... Nie mam czasu na c sprawdź to w tej chwili. – Powerlord

2

Uważam, że nowoczesne podejście polega na użyciu atrybutu id, który zostanie oceniony jako zakotwiczenie. Na przykład, jeśli zmienił

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

do

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

Nadal rozwiązałaby go jako page.html#one.

1

Tak to jest nieaktualne. Powinieneś zamienić na atrybut "id". Strona

Cytowanie W3Schools:

"id Atrybut Zastępuje nazwę atrybutu HTML 4.01 definiuje atrybut name dla elementów a, aplet, ramki iframe, img, a mapa w XHTML nazwy. atrybut jest przestarzały. Zamiast tego użyj identyfikatora. "

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

2

Można również link na nagłówku sekcji:

Spis treści

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

Źródło: http://www.w3.org/TR/REC-html40/struct/links.html

1

name = atrybuty są dla elementy do etykietowania w formularzu i mogą być używane tylko na formularzu < formularze (dane wejściowe, tekstowe, wybierz itd.). We wszystkich innych przypadkach używany jest ID =. Właśnie dlatego ludzie W3C uważali, że nie są znane dwa różne sposoby nazywania elementów (z różnymi zestawami dozwolonych postaci).

1

Ale tutaj http://www.w3.org/TR/html4/struct/links.html#h-12.2.3 Przeczytałem: "Niektóre starsze programy użytkownika nie obsługują kotwic utworzonych za pomocą atrybutu id". Więc?

+0

Więc nikt nie powinien już używać starszych agentów użytkownika; w każdym razie są pełne luk w zabezpieczeniach. A jeśli ty, jako webdeveloper, chcesz wspierać, powiedzmy, Netscape 4, masz większe problemy niż to, że URI z '#' nie przeskoczy do właściwej lokalizacji. –

+0

Tak, teraz już 2014 rok, zgadzam się – waanders

0

Do <a name="..."></a> nie jest już obsługiwana przez normę (X) HTML używasz - i to nie tylko przestarzałe - może to być jedyna bezpieczna w użyciu zarówno name i id na kotew łączących do części tej samej stronie. Z W3C's XHTML 1 spec:

W XML, Uri odniesień RFC2396 które kończą się z fragmentem identyfikatory postaci "#foo" nie odnoszą się do elementów z atrybutem name="foo"; raczej odnoszą się do elementów z atrybutem zdefiniowanym jako identyfikator typu, np. atrybut id w HTML 4. Wiele istniejących klientów HTML nie obsługuje w ten sposób atrybutów typu ID, więc identyczne wartości mogą być zasilane zarówno z tych atrybutów, aby zapewnić maksymalnie do przodu i do tyłu kompatybilność (np <a id="foo" name="foo">...</a>).

Powiązane problemy