第8回にも述べたが、F12で開発ツールを表示し(ブラウザ画面の下半分または切り離して別窓として)、
![]() |
![]() |
![]() |
IE | firefox | chrome |
document.body
に、そのページのDOMがデータとして設定されている。この資料集のページでは、jQuery(の互換であるZeptoであることもある)が読み込まれているので、以下のような変数が設定されており、 jQueryの式や関数呼出もコンソールで入力し評価したり実行したりできる。
jQuery
// => function (a,b){return new r.fn.init(a,b)}
$
// => function (a,b){return new r.fn.init(a,b)}
* 上の2つは同じものを指している。
* Zeptoを使ってるページでは 変数
jQuery
は使われておらず、
`$` は上と同じ動作をする(表記は違うが)関数を返す。
.
を入れてから、Ctrl+Space
を叩くと、その変数が指すオブジェクトに関する、様々なメンバ名
(つまりここに入力して意味がある名標の一覧)がプルダウンメニュー
に表示される。メソッドは、関数を属性の値として持つもの。たとえば、
document.getElementById
// => function getElementById() { [native code] }
のように表示される。
関数(を値として持つメンバ参照や変数)を表記しただけでは 関数はプログラムとして動作しない。後ろに括弧 () をつけたり その括弧に中に引数を与えたりすることで関数呼出が行われる。
document.getElementById('#section')
// => DOM要素が(該当するものがあれば)返される
doctype html
meta charset="utf-8"
p 最初に一行入れておく
button onclick="x()" 実行!
/ ~~~~~~~ イベント処理の指示はここで行っている
javascript:
function x(){
document.write("すべて上書き")
}
=> ソース
他に、document.locationプロパティを書き換えて (プログラムから)強引にジャンプさせるというテクニックもある。
document.location="http://wwww.google.co.jp"
innerHTMLについては、設定した文字列の中に HTMLタグとして認識できるものがあれば、 そこにHTML要素を作成する (ブラウザがHTMLを読み込むときと同じ動作)。
doctype html
meta charset="utf-8"
p innerHTML
button onclick="x()" 実行!
#target ここが変化します
javascript:
function x(){
var e=document.getElementById('target')
e.innerHTML='<h1>新しい要素</h1><p>さらに新しい要素</p><ul><li>リスト</li></ul>'
}
=> ソース
一方、textContent属性にHTMLを代入すると、 すべて文字列として扱われる
document.querySelector('p').textContent="<h1>タグに囲まれた文字</h1>"
DOM上の適切な場所に配置する(insertBeforeなど種々のメソッドがある)
doctype html
meta charset="utf-8"
p createElement
button onclick="x()" 実行!
#target この前に要素を挿入しよう
javascript:
function x(){
var e=document.getElementById('target')
var ne=document.createElement('p')
ne.textContent=new Date().toLocaleTimeString()
document.body.insertBefore(ne,e)
// 前からある要素 e の前に、今作った要素 ne を挿入
}
=> ソース
これまでの方法に対して、プログラムからイベント処理を 与える方法もここで示す(addEventListenr)
doctype html
meta charset="utf-8"
p 複数Element と eventListener
.tgt style="top:20%"
.tgt style="top:70%"
css:
div {
width:300px;height:100px;
position:absolute;background-color:yellow
}
javascript:
var es=document.getElementsByClassName('tgt')
function x(msg){
[].forEach.call(es,e=>e.textContent=msg)
//should be... es.foreach(e=>...)
}
document.addEventListener('click',ev=>x(`${ev.clientX},${ev.clientY}`),false)
=> ソース