![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
「querySelector」の使い方について教えて下さい。
ガイドブックのサンプルコードで気が付いたのですが
以下のコードでは1番と2番では出力結果が違います。
1番はわかります。
「querySelector」はCSSのタイプセレクタの値を取得するメソッドなので、
1番の出力結果は理解できます。
ですが、2番の方は意味がわかりません。
「console.log(lang3.textContent);」にしたときの結果が、
「ja」になるのならまだ理解できます。
ですが「.textContent」を追加したわけでもないのに
どうして右側に「.lang」を追加しただけで
2番の出力結果は「ja」になるのでしょうか?
そう思うので3番で試してみたところ
コンソールへの出力は無茶苦茶なものになり
余計にわからなくなりました。
1番は問題ありません。
ですが、なぜ2番と3番はこんな出力結果になってしまうのでしょうか?
お手数ですが、JavaScriptに詳しい方、説明の上手な方、
「querySelector」メソッドの使い方、考え方、プロパティ等の扱い方のコツ、etc.を教えて下さい。
追記
※込み入った説明でなく、ちょっとしたコツのような感じでOKです。
※可能でしたらサンプルのコードと一緒に説明して頂ければありがたいです。
※コンソールへの出力結果は画像の通りです。
↓サンプルのコードはこちらです。
<!doctype html>
<html lang="ja">
</html>
<script>
//1
var lang=document.querySelector('html');
console.log(lang);
//2
var lang2=document.querySelector('html').lang;
console.log(lang2);
//3
var lang3=document.querySelector('html');
console.log(lang3.textContent);
</script>
![「【JavaScript】querySel」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/3/772459_5c81230700840/M.jpg)
No.1ベストアンサー
- 回答日時:
langは属性であってタグ内のテキストではありませんので正しいです。
2は、html要素内のlang属性を得ようとした結果なので何も不思議ではありません。
3は、html要素内の文字列と認識される内容を全て得ます。1のコンソール結果のhtml要素内を展開してみてください。それと同じ結果が3として出力されているはずです。
展開してみてdom構造を見ると分かると思いますが、script要素がhtml要素の外側で記述されていること自体が誤りです。
ただしこの場合、JavaScriptが読み込まれて即実行されるようになっているため、script要素をhead要素内などに設置した時、body要素に含まれるテキストは出力されません。
解答して頂きありがとうございます。
>2は、html要素内のlang属性を得ようとした結果なので何も不思議ではありません。
↓
なるほどです。わかりました。今回はlang属性ですが、
html要素内にある要素がほかの属性である場合もあるし、
その時は属性を指定することができるわけですね。
>3は、html要素内の文字列と認識される内容を全て得ます。
↓
わかりました。今回はhtml要素なのでページ内全てが対象になってしまうので、
全部テキストで出力されてしまうわけですね。
今までずっと getElementById() しか使ってませんでした。
ガイドブックで勉強しており、今回初めてquerySelector()を使うようになったので、
まだ感覚に慣れておらず(打ち込みで目いっぱいなので)気が付きませんでした。
言われてみれば全部、ご指摘の通りです。
>1のコンソール結果のhtml要素内を展開してみてください。それと同じ結果が3として出力されているはずです。
↓
展開すると1の結果がものすごく多いため、よくわかりません。
ですが、よく見ると似た記述がところどころにあります。
なので、こちらの件も何となくですが教えて頂いたことが実感できました。
今回は丁寧に解答して頂き、ありがとうございます。
機会があれば、またお願いします。
※質問はしばらく開けておきます。
No.3
- 回答日時:
補足
> 今回は属性しかないのでプロパティは関係ありませんが、
属性を参照するならこう
var lang2=document.querySelector('html').getAttribute("lang";
> 今回はイベントではないので
> あまり関係ないような気がします。
いえ間違います。
「スクリプトをHTMLの後ろの方に書く」という認識がよくないです
headタグに書いたり、外部ファイルに書いたりするとき
どこからでも参照できるようにwindowが呼ばれたあとの
ページがレンダリングされる前に要素を参照するのが
window.addEventListener('DOMContentLoaded', function(e){・・・});
という処理です。
つねにこの処理は意識して使ってください
解答して頂きありがとうございます。
属性を参照するならこう
var lang2=document.querySelector('html').getAttribute("lang");
↓
教えて頂きありがとうございます。
No.2の返答の通りガイドブックを2冊使っているのですが、
2のガイドブックはこの記述が多いです。
>ページがレンダリングされる前に要素を参照するのが
window.addEventListener('DOMContentLoaded', function(e){・・・});
という処理です。
↓
アドバイスありがとうございます。
今使っている1のガイドブックはスクリプトの
読み込みのタイミングについて詳しい記述がありません。
2の方のガイドブックは、ところどころ指定があるので、
2の本を使うようになったら、ちょっとづつ教えて頂いたことを
実感する機会があると思います。
捕捉にて、教えて頂きありがとうございます。
機会がありましたら、またお願いします。
No.2
- 回答日時:
2については、html要素には属性とプロパティがあり、
プロパティが設定されていない状態でそれを参照すると
属性が参照されるという特徴があります
なおhtmlタグで囲ってもdocument.querySelectorは
DOMとして拡大解釈してくれるので全体のソースが表示されます
(やる意味はあまりないですが)
querySelectorは参照するタイミングが重要なので
以下のように書くのが肝要です
<!doctype html>
<html lang="ja">
<head>
<script>
window.addEventListener('DOMContentLoaded', function(e){
var lang=document.querySelector('html');
console.log(lang);
var lang2=document.querySelector('html').lang;
console.log(lang2);
var lang3=document.querySelector('html');
console.log(lang3.textContent);
});
</script>
</head>
<body>
hoge
</body>
</html>
解答して頂きありがとうございます。
>2については、html要素には属性とプロパティがあり、
プロパティが設定されていない状態でそれを参照すると
属性が参照されるという特徴があります
↓
なるほどです。
今回は属性しかないのでプロパティは関係ありませんが、
気をつけます。
>querySelectorは参照するタイミングが重要なので
以下のように書くのが肝要です
↓
アドバイスありがとうございます。
今回はイベントではないので
あまり関係ないような気がします。
ですが「読み込んでからでないと動作しない」
というようなこともあるようなので、
気をつけます。
追記
ガイドブックを2冊使っています。
1には「DOMContentLoaded」の記述が全くありませんが、
2にはあります。
この件も、質問する機会があると思うので、
機会がありましたらまたお願いします。
今回は教えて頂きありがとうございます。
※質問はしばらく開けておきます。
1
確かな力が身につくJavaScript「超」入門
http://urx3.nu/TjOg
2
たった1日で基本が身に付く!
JavaScript超入門
http://urx3.nu/VBKp
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Excel(エクセル) excelにて、ある固定値から連番を振りたいが、上限値が異なる連番を振る処理を複数回行いたい場合 6 2022/10/22 11:01
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- C言語・C++・C# C言語の質問です HTMLでこのようなコードを書いたのですがそれをC言語で同じように書きたいです < 1 2022/08/11 23:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
getElementsByNameで要素が取得...
-
ボタンのID名を取得するには?
-
function の return 値を表示し...
-
「オブジェクトを指定してくだ...
-
月ごとに背景色を変える
-
html javascript 作った配列を...
-
SCRIPT5007: 未定義または NULL...
-
フォーカス移動抑止について
-
IEの拡大・縮小機能をWebページ...
-
bodyタグのfocus
-
<a href="#" …>の意味を教えて...
-
<div>のタッチ状態を維持したま...
-
別ファイルのfunctionの読み込み方
-
プラグイン無しでContactform7...
-
SQLのWHEREで全てを質問する方法
-
ウインドウを縮小しても文字を...
-
プルダウンメニューを別ファイ...
-
Dreamweaver で 外部JSを読み込...
-
「関数が定義されていない」と...
-
window.openで同画面遷移しない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
getElementsByNameで要素が取得...
-
JavaScriptでiframeの内容を「...
-
function の return 値を表示し...
-
SCRIPT5007: 未定義または NULL...
-
ボタンのID名を取得するには?
-
JavaScript でキーを送る
-
フォーカス移動抑止について
-
乱数を一定時間毎に表示させた...
-
ボタンを押してテキストエリア...
-
bodyタグのfocus
-
JavaScriptでのEnterキーとAlt+...
-
自動ジャンプでフォームデータ...
-
一定時間画像を表示させ、その...
-
リンク移動先のURLを取得
-
idHOGEで取得したinnerText(数...
-
「オブジェクトを指定してくだ...
-
html javascript 作った配列を...
-
キーを押している間の時間を計...
-
チェックボックスの選択パター...
-
Operaでのobjectタブの高さ変更
おすすめ情報