2013-07-10 5 views
7

querySelectorAllはidの文字期間(。)をサポートしていますか?querySelectorAllはidの文字期間(。)をサポートしていますか?

私は以下のような要素追加した場合、私は意味:

var div = document.createElement('div'); 
div.id='my.divid'; 
document.body.appendChild(div); 

をしてから、私は以下のようにquerySelectorAll使用:

document.querySelectorAll('#my.divid'); 

私は何も持っていません!

idは正式な文字で、querySelectorAllはfirefoxが提供する公式なメソッドです。このメソッドはidのピリオド(。)をサポートしていません。間違いをしましたか?

ありがとうございます!

答えて

0

期間はquerySelectorAllで、cssクラスを指定していることを意味します。あなたのケースでは、querySelectorAllid "my"で、CSSクラス "divid"を持つDOM要素を見つけようとしています。 querySelectorAllは、あなたがクラスではなくidで要素を欲しいと知っていますか?メソッドを混乱させるように適切なid atrributeを持つことはあなた次第です。期間は許されますが、ほとんどの場合jqueryなどの他のライブラリと混同しないようにするのがベストプラクティスです。

+0

これは、querySelectorAllがid属性のピリオドをサポートしていないことを意味しますか? idにピリオドを挿入する場合は、querySelectorAllで取得できません。または、idのピリオド(。)をバックスラッシュとピリオド(\。)に変更する必要があります。 – user2155362

+5

"\\"を使用する必要があります。それを逃れるために、私は思う。 – mohkhan

+2

@ user215536​​2:あなたがあなたのコメントを投稿する前に、あなたが質問したすべてを基本的に説明したアップアップ回答を見逃しているに違いありません。 – BoltClock

13

あなたはID my.dividを持つ要素を.は、クラスセレクタを表し、そのセレクタ#my.dividはID myとクラスdividを持つ要素を表し、ないことを覚えておく必要があります。だから、次の要素は、あなたのセレクタにマッチしたことになります。

var div = document.createElement('div'); 
div.id = 'my'; 
div.className = 'divid'; 
document.body.appendChild(div); 

あなたは上記与えているようID my.dividで要素を選択する必要がある場合は、ピリオドをエスケープする必要があります。

document.querySelectorAll('#my\\.divid'); 

二重バックスラッシュはJSセレクタ文字列であることに注意してください。 CSSルールでは、単一のバックスラッシュを使用します:#my\.divid

+0

ダブルスラッシュ@BoltClockの使用方法を明確にしてくれてありがとう – gumuruh

0

私はかなりIDで合法ではないと確信しています。 CSSでは、これは次のように解釈されます:<div id="my" class="divid"></div>。そのようにスタイルを決めることはできません。そして、querySelectorAllは同じパーサを使用しているので(私は思う)、あなたは同じ問題を抱えています。

+1

HTML5では[ID] (http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#the-id-attribute)には、少なくとも1つの文字と空白文字が必要です。それ以外は、何かが行きます。 HTML 4.01の制限はなくなりました。実際には、HTMLが正式なものになる前に、ブラウザはすでに何かを許可していました。 – RobG

+1

新しいものを学ぶ。私の「id」に「。」を追加するつもりはないと思いますが、知っておきたいことです。まだ数字で始めるのは大丈夫なのか分からなかった... – kalley

+0

あなたができることとできることの間には大きな違いがあります。 :-) – RobG

関連する問題