2009-03-03 8 views
13

Visual Studioは、ページ上のアンカータグを好きではない:<a>アンカータグの 'name'属性は古くなっていると考えられますか?

検証(XHTML 1.0暫定): 属性 'name' は が古いと考えられています。新しい構成は が推奨されています。

私はname属性をこの方法で使用しています。&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> 

これを行うにはもっと現代的な方法がありますか?それとも、Visual Studioはいたずらにいっぱいですか?

答えて

21

代わりにid属性を使用してください。同じように動作し、あなたは人工<a name=...>は必要ありませんが、単に

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

NOT TRUE! idは多くの要素と名前を共有できますが、idは全面的に一意でなければなりません。また、getElementsByNameは要素のリストを返します。 getElementByIdは単一の要素を1つだけ返します。 – hanshenrik

+0

@hanshenrikこの答えは、 'name'の代わりに常に' id'を使うとは言いません。質問に記載されている状況に注意してください。セクションにリンクする方法について質問します。名前が重複している場合は、最初にそれらにリンクすることは無意味です。いずれにしても、プログラミング目的で複数の要素を識別したい場合は、 'name'属性ではなく、クラスを使用する必要があります。 – phihag

1

私はそれを行うための適切な方法は< idは=「1」>

14

名属性がXHTML 1.0に廃止されていると信じて - あなたはのHTML Compatibility GuidelinesFragment Identifiersを参照してください、しかし同じようにid属性を使用することができますXHTML仕様

だから、あなたは、単に

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

を使用しますが、1.0仕様はこのようなもので、安全なそれを再生を推奨していることに注意することができます。しかし、あなたのフラグメントは、name属性がありXHTML 1.1を、使用しています

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

entirely removedからamapの要素になっています。そのため、IDのみを使用できます。

+1

実は、問題のフラグメントは、それはプレーン 'name'のは単に非推奨されていないことを意味XHTML 1.1、ですさ –

+0

まあ、彼は彼が1.1を使っていたことを逃した - 回答を修正する –

+0

私は1.1まだ入力タグの名前属性を持っていると仮定している...私は時間がない現時点でそれを聞いてください。 – Powerlord

2

私は近代的なアプローチはアンカーとして評価されるid属性を使用することだと思います。たとえば、場合あなたはまだpage.html#oneとしてそれを扱うでしょう

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

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

を変更しました。

1

はい、それは時代遅れです。あなたは "id"属性で置き換えるべきです。

id属性はname属性 HTML 4.01、要素、アプレット、フレーム、IFRAME、IMG、およびマップのname属性を定義するXHTMLで名前を置き換えます。W3Schoolsのページを引用

代わりにidを使用してください。あなたはセクションヘッダにもリンクすることができ

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

2

:内容の

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

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

1

名=属性がためのものですフォームに要素をラベリングし、<フォーム>要素(input、textarea、selectなど)でのみ使用できます。それ以外の場合は、ID =が使用されます。まさにW3Cの人々が要素を命名する2つの異なる方法(許容される異なる文字セットを持つ)が必要であると考えた理由は容易には分かりません。

1

しかし、ここではhttp://www.w3.org/TR/html4/struct/links.html#h-12.2.3私はこれを読んでいます:「古いユーザエージェントの中には、id属性で作成されたアンカーをサポートしていないものがあります。そう? <a name="..."></a>まで

+0

だから、誰もそれらの古いユーザエージェントをもう使用するべきではありません。彼らはとにかくセキュリティホールでいっぱいです。また、Web開発者がNetscape 4をサポートしたい場合、「#」を含むURIが正しい場所にジャンプしないという大きな問題があります。 –

+0

はい、今はすでに2014年ですが、私は同意します – waanders

0

は、もはや使用している(X)HTML標準でサポートされていない - とだけ非推奨ではない - それは、同じページの一部にリンクアンカーにnameidの両方を使用するのが最も安全かもしれません。 W3C's XHTML 1 specから:フォーム"#foo"の 識別子が属性name="foo"持つ要素を参照しない断片で終わるXMLで

、URI-参照RFC2396。 これらは、IDタイプの属性が定義されている要素を参照します。たとえば、属性はHTML です。4.多くの既存のHTMLクライアントは、このようにIDタイプ属性の使用をサポートしていないため、同じです。 値前方最大と後方 互換性(例えば、<a id="foo" name="foo">...</a>)を確保するために、これらの属性の両方のために供給することができる。

関連する問題