2017-08-05 9 views
0

素子111は有効なHTML id属性ですか、またはdocument.querySelector()およびdocument.querySelectorAll()が正しく構文エラーをスローしていますか?

const div = document.createElement("div"); 
 

 
div.id = 111; 
 

 
document.body.appendChild(div); 
 

 
try { 
 
    console.log(document.getElementById("111")); 
 
} catch(e) { 
 
    console.error(e); 
 
}

参照戻りdocument.getElementById()しかし

const div = document.createElement("div"); 
 

 
div.id = 111; 
 

 
document.body.appendChild(div); 
 

 
try { 
 
    console.log(document.querySelector("#111")); 
 
} catch(e) { 
 
    console.error(e); 
 

 
    /* 
 
    Chromium: 
 

 
    DOMException: Failed to execute 'querySelector' on 'Document': 
 
    '#111' is not a valid selector. 
 

 
    Firefox 
 
    SyntaxError: '#111' is not a valid selector 
 

 
    */ 
 
} 
 

 
try { 
 
    console.log(document.querySelectorAll("#111")); 
 
} catch(e) { 
 
    console.error(e); 
 

 
    /* 
 
    Chromium: 
 

 
    DOMException: Failed to execute 'querySelector' on 'Document': 
 
    '#111' is not a valid selector. 
 

 
    Firefox 
 
    SyntaxError: '#111' is not a valid selector 
 

 
    */ 
 
}

を考える:

6.2 SGML basic types

IDNAMEトークンは文字([A-ZA-Z])で始まる必要があり、文字の任意の数が続いてもよい、数字([0-9]) 、ハイフン( " - ")、 アンダースコア( "_")、コロン( ":")、およびピリオド( "。"

7.5.2 Element identifiers: the id and class attributes

属性

ID =名[CS]この属性は、要素に名前を割り当てる定義します。この名前は で、ドキュメント内で一意である必要があります。

DOM - Living Standard

本明細書は、クラス、ID、およびスロット任意の要素に 属性の要件を定義するが、それは が適合するかしないそれらを使用するかどうかについて何ら主張を行いません。

HTML - Living Standard

id属性は、その要素のunique identifier (ID)を指定します。

IDが使用できる形式には他に制限はありません。 特に、IDは、数字で始まり、単に数字で構成することができる下線で を開始し、ちょうど句読点から成り、等

Document.querySelector()

はSYNTAX_ERR例外をスローした場合、指定されたグループのセレクタが 無効です。

Document.querySelectorAll()

セレクタの指定されたグループが 無効の場合SYNTAX_ERR例外をスローします。


"111"は、有効なHTMLのid属性やdocument.querySelector()document.querySelectorAll()が正しく構文エラーを投げていますか?

+0

[HTMLのid属性の有効な値は何ですか?](https://stackoverflow.com/questions/70579/what-are-valid-values-for-the-id-attribute-in- html) – Thilo

+1

CSSはHTML5より厳密です。リンクされた複製を参照してください。 – Thilo

+0

IDとNAMEトークンは、文字([A-Za-z])で始まり、数字、数字([0-9])、ハイフン( - )、アンダースコア(_ )、コロン( ":")、およびピリオド( "。")が含まれます。あなたがルールを見ているように、数値ではなくアルファベットで始めるように変更してください。 – Thennarasan

答えて

2

HTML id属性についてMDNによると:

この属性の値は、空白文字(スペース、タブなど)を含めることはできません。

これは唯一の制限です。彼らはHTML4がより厳格であったというメモを持っていますが、それだけです。 specによると

値は任意のASCII空白文字を含めることはできません。

つまり、111は、HTML id属性の有効な値です。

ID selectorが有効identifier続いて、#からなる:

querySelectorquerySelectorAllしかし、より厳しいCSSセレクタを使用します。

CSSでは、識別子(セレクタの要素名、クラス、およびIDを含む)には、文字[a-zA-Z0-9]とISO 10646文字U + 00A0以上、 - )とアンダースコア(_)。 数字は、2つのハイフン、ハイフン、数字の順で始めることはできません。識別子には、エスケープ文字とISO 10646文字を数値コードとして含めることもできます(次の項目を参照)。例えば、識別子「B & W?」は、 「B \ & W?」と書かれています。または「B¥26 W¥3F」と入力します。

つまり、#111は有効なCSSセレクタではありません。正しく構文エラーを投げ

が有効なHTMLのid属性"111"ですかdocument.querySelector()document.querySelectorAll()のとおりです。

document.querySelector('[id="111"]') 

は直接あなたの質問に答えるために:代わりに、でしょうか?

"111"構文エラーが正しくスローされている有効な属性、です。

関連する問題