まず前提として、この記事を書いているのは未経験からプログラミングに挑戦中の者になります。学習はフィヨルドブートキャンプに参加しながら取り組んでいて、現役のエンジニアの方からレビューをもらいながら進めています。 現在の学習状況は以下を随時更新しているので興味ある方はご覧ください。 筆者は執筆時点で、Ruby(Ruby on Rails)のプラクティスが終わったあとにJavaScriptに取り組んでいるので、完全に0からではありません。JavaScriptを多言語から学ぶにあたって、まず覚えるべき要点をまとめました。 詳しい解説ではなく要点をまとめた学習記録・ノートになりますのでご注意ください。 この記事の本体は以下のなります。この記事はその記事の一部になりますので、そちらからご覧ください。 Document オブジェクトの 例:id属性の値として'button'が設定された要素ノードを取得する場合 Document オブジェクトの getElementsByTagName メソッドは、要素のタグ名を指定して一致する要素ノードをすべて取得する。 練習してみた HTML ボタンを押してみると実行できました😄
例
idの属性の値が しかしまとめて記述することもできる。
犬・猫だけ表示ができました〜 ボタンを押すと以下の要素が取得できる
このようにnameを指定して対象の要素ノードを操作できる。 CSS(Cascading Style Sheet) セレクタは、 HTMLページに対してスタイルをどの要素に設定するのかを指定する時に使用する。 全要素を対象とする(*)
- すべての要素ノードを対象とする場合は タグ名を指定する
pタグを全て取得する id属性の値を指定(#id)
要素に設定された id 属性の値を指定する場合は、 class属性の値を指定(.class)
要素に設定された class 属性の値を指定する場合 複数のセレクタのいずれかに一致する(A B C)
セレクタをカンマ(,)で区切って記述することで、複数のセレクタの少なくともいずれか一つに一致する要素ノードを取得できる。 以下の例では、class属性がmy_class2・id属性がmy_idいずれかに該当する要素を取得しています。 Aのセレクタに一致する要素の子孫要素の中でBのセレクタに一致する(A B)
セレクタを空白で区切ることで、最初に一致した要素の子孫要素の中で、さらに要素を指定して選択することができる。 このようにid属性のmainの中のclass属性greetingだけを取得できている。 Aのセレクタに一致する要素の子要素の中でBのセレクタに一致する(A > B)
セレクタを > で区切って記述することで、最初のセレクタに一致する要素の子要素の中で、次に記述したセレクタに一致する要素ノードを取得する。 Aのセレクタに一致する要素の中で属性値Bを持つ要素に一致する(A[B]) getElementById メソッドや parentNode プロパティを参照することで、このノードの親ノードを取得できる。 id属性がtestの要素を取得して変数に格納、その変数に対して 戻り値はノードの種類を表す unsigned short 型の値(数字)が返ってくる。 odeName プロパティを参照するとノードの名前を取得することができる。 Node オブジェクトの nodeValue プロパティを参照するとノードの値を取得することができる。 これらを 新しいテキストを設定する
また参照するだけでなく新しい値を設定できる。 使い方 これを nnerText プロパティは参照するだけではなく新しい値を設定することができる。 表示されているpタグの文字列をボタンを押して、新しい文字を設定して変化させる。 こんな感じで変化する
innerHTML プロパティを参照すると要素に含まれる HTML 文を取得することができる。 上記のHTMLは以下のように取得できる innerHTML プロパティは参照するだけではなく新しい値を設定することもできる。 実演 実行したらこんな感じ。文字だけでなくタグも変わっている。
これを 要素に設定された属性値は以下のようにプロパティ名として属性名を指定して参照することができる。 例 属性名を表すプロパティに対して値を設定することで、属性値に新しい値を設定することができる。 要素の属性名を取得するもう一つの方法として setAttribute メソッドは指定した属性名の属性値に新しい値を設定する。
- 第一引数に属性名
- 第二引数に属性値を指定
- 属性名に対して値が設定されていた場合は新しい属性値が設定される
- 属性名に値が設定されていなかった場合は、新しく属性名に対して属性値が設定される
emoveAttribute メソッドを使用することで要素に設定されている属性を削除することができる 例 上記の例は新しくpタグを作成して先頭にテストという文字列を設定して変数に入れる。次にidのtestを取得し、そこの先頭に先ほど作った文字列を入れている。 同じように最後にも追加ができる。 insertBefore メソッドはノードを子ノードの中の指定ノードの前に追加する。
currentScriptプロパティを参照すると現在実行している これをブラウザで実行するscriptタグがコンソールに表示される。 以下のように取得したScriptタグに要素を追加するなどの操作が行える。 実行するとブラウザに 文字列の形式で HTML コードを書き込むことができるが、現在 HTML に関する仕様を定めている HTML Living standard ではこのメソッドの使用について推奨はしていない。 Document.currentScript プロパティと insertAdjacentHTML メソッドを組み合わせて代替するなどの方法がよさそう。
はじめに
前提
DOM操作
DOMとは
DOMの階層構造
ノード間の関係
id属性の値を指定して要素ノードを取得(getElementById)
getElementById
メソッドは、要素の id 属性の値を指定して一致する Element オブジェクトを取得するdocument.getElementById(id)
let element = document.getEkementById('button');
タグ名を指定して要素ノードを取得(getElementsByTagName)
document.getElementsByTagName(tagname)
div
や p
など)*
を指定した場合はすべての要素に一致
length
プロパティと item
メソッド、namedItem
メソッドが用意されているため取得した要素ノードの数を取得したり、指定した要素ノードを取したりできるlet elements = document.getElementsByTagName("div");
// 取得した要素の数を取得
let count = elements.length;
// インデックスを指定して要素を取得
let element = elements.item(0);
// インデックスを指定して要素を取得その2
let element = elements[0];
// ID属性またはname属性を指定して要素を取得
let element = elements.item("user");
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>getElementsByTagNameの練習!!</title>
</head>
<body>
<h1>わいの好きなもの</h1>
<div>
<p>ラーメン</p>
<p>寿司</p>
</div>
<div>
<p>猫</p>
<p>犬</p>
</div>
<button onClick="getElements();">要素をコンソールに表示させる</button>
<script>
function getElements() {
let elements = document.getElementsByTagName("p");
for (let i = 0; i < elements.length; i++) {
console.log("Text: " + elements.item(i).textContent);
}
}
</script>
</body>
</html>
特定の要素の子孫要素に限定して要素ノードを取得
list
の要素ノードの子孫の中からdivタグの要素ノードを取得する場合は通常以下のように2行にわたって記述が必要let element = document.getElementById('list');
let elements = element.getElementsByTagName('div');
let elements = document.getElementById('list').getElementsByTagName('div');
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>getElementsByTagNameの練習!!</title>
</head>
<body>
<h1>わいの好きなもの</h1>
<div id="food">
<p>ラーメン</p>
<p>寿司</p>
</div>
<div id="other">
<p>猫</p>
<p>犬</p>
</div>
<button onClick="getElements();">犬・猫だけを表示</button>
<script>
function getElements() {
let elements = document
.getElementById("other")
.getElementsByTagName("p");
for (let i = 0; i < elements.length; i++) {
console.log("Text: " + elements.item(i).textContent);
}
}
</script>
</body>
</html>
class属性の値を指定して要素ノードを取得(getElementsByClassName)
getElementsByClassName
メソッドは、要素の class 属性の値を指定して一致する要素ノードをすべて取得する。document.getElementsByClassName(classnames)
length
メソッドやインデックスを指定しtえ要素を取得することができる)length
が0のHTMLCollection オブジェクトが返ってくる<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>getElementsByClassNameの練習</title>
</style>
</head>
<body>
<p>[適当な日記]</p>
<div class="content">
<p>今日はこんな場所に行きました〜</p>
<p class="content">行き先1:公園</p>
<p class="content">行き先2:スーパー</p>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements(){
let elements = document.getElementsByClassName('content');
// 取得した値を使ってやりたい処理を書く
</script>
</body>
</html>
<div class="content">
<p>今日はこんな場所に行きました〜</p>
<p class="content">行き先1:公園</p>
<p class="content">行き先2:スーパー</p>
</div>
<p class=<200b>"content"><200b>行き先1:公園<200b></p><200b>
<p class=<200b>"content"><200b>行き先2:スーパー<200b></p><200b>
name属性の値を指定して要素ノードを取得(getElementsByName)
getElementsByName
メソッドは、要素の name 属性の値を指定して一致する要素ノードをすべて取得する。document.getElementsByName(name)
length
プロパティと item
メソッドが使える<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>getElementsByNameの練習</title>
</head>
<body>
<p>メニュー</p>
<label><input type="radio" name="food" value="Coffee" />coffee</label>
<label><input type="radio" name="food" value="Cake" checked />Cake</label>
<label><input type="radio" name="food" value="Tea" />Tea</label>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let elements = document.getElementsByName("food");
console.log(elements);
for (let i = 0; i < elements.length; i++) {
if (elements.item(i).checked) {
console.log(elements.item(i).value + " is checked");
} else {
console.log(elements.item(i).value + " is not checked");
}
}
}
</script>
</body>
</html>
CSSセレクタ形式の条件に一致する要素ノードを取得(querySelector, querySelectorAll)
querySelector
メソッド・querySelectorAll
メソッドはCSSのセレクタ形式で条件を指定して一致する要素を取得できる。document.querySelector(selectors)
document.querySelectorAll(selectors)
CSSセレクタの種類と指定方法
*
と記述
- HTML全体を指定するlet elements = document.querySelectorAll('*');
div
p
h
タグなどを指定する場合は、タグ名をそのまま記述。let elements = document.querySelectorAll('p');
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>getElementsByNameの練習</title>
</head>
<body>
<h2>メニュー</h2>
<p>要素1</p>
<p>要素2</p>
<p>要素3</p>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.querySelectorAll("p");
console.log(result); // NodeList(3) [p, p, p]
console.log(result[0]); // <p>要素1</p>
console.log(result[1]); // <p>要素2</p>
console.log(result[2]); // <p>要素3</p>
}
</script>
</body>
</html>
#値
と記述する <body>
<h2>メニュー</h2>
<div id="content">
<p>ここを取得</p>
</div>
<div>
<p>ここは取得しない</p>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.querySelectorAll("#content");
console.log(result); // NodeList [div#content] <p>ここを取得</p>の要素が取得できる
}
</script>
</body>
<body>
<h2>メニュー</h2>
<div class="my_class">
<p>ここを取得</p>
</div>
<div>
<p>ここは取得しない</p>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.querySelectorAll(".my_class");
console.log(result); // NodeList [div.my_class]
}
</script>
</body>
<body>
<h2>メニュー</h2>
<div id="my_id">
<p>ここを取得</p>
</div>
<div>
<p class="my_class">ここは取得しない</p>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.querySelectorAll("#my_id, .my_class");
console.log(result); // NodeList(2) [div#my_id, p.my_class]
}
</script>
</body>
<body>
<div id="main">
<p class="greeting">こんにちは</p>
<div>
<p class="other">元気です</p>
</div>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.querySelectorAll("#main .greeting");
console.log(result); // NodeList [p.greeting]
}
</script>
</body>
</head>
<body>
<div id="main">
<p class="greeting">こんにちは</p>
<div>
<p class="greeting">こんばんは</p>
</div>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.querySelectorAll("#main > p");
console.log(result); // NodeList [p.greeting] こんにちはだけ取得できた
}
</script>
</body>
<body>
<div>
<p style="font-size: 10px">こんにちは</p>
</div>
<div>
<p class="other">その他</p>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.querySelectorAll("p[style]");
console.log(result); // NodeList [p] こんにちはだけ取得できた
}
</script>
</body>
ノードの子・親・兄弟ノードを取得
すべての子ノードを取得
querySelector
メソッドなどを使って要素ノードを取得したあと、 Node オブジェクトの childNodes
プロパティを参照することで、このノードの 1 つ下の階層にある子ノードをすべて取得することができる
使い方
node.childNodes
<body>
<div id="element">
<p>要素1</p>
<p>要素2</p>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.getElementById("element");
console.log(result.childNodes); // NodeList(5) [text, p, text, p, text]が取得できる
console.log(result.childNodes[1]); // <p>要素1</p>が取得できる
console.log(result.childNodes[3]); // <p>要素2</p>が取得できる
}
</script>
</body>
最初の子ノードと最後の子ノードを取得
node.firstChild
firstChild
プロパティを参照することで、このノードの 1 つ下の階層にある子ノードの中の最初のノードを取得することができる(参照専用)node.lastChild
同じ階層の次のノードと前のノードを取得
node.nextSibling
node.previousSibling
previousSibling
プロパティを参照することで、このノードと同じ階層にある一つ前のノードを取得できる(参照専用)親ノードを取得する
node.parentNode
<body>
<div>
<p>要素1</p>
<p id="test">要素2</p>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let result = document.getElementById("test");
let parent = result.parentNode;
while (parent) {
console.log(parent.nodeName); // NodeList(5) [text, p, text, p, text]が取得できる
parent = parent.parentNode;
}
}
</script>
</body>
parentNode
で親ノードを取得。
それを繰り返し分の中で再度変数に入れ直すことで親の親の親と取得でき最終的に#document
まで取得できた。実行結果
DIV
BODY
HTML
#document
ノードの種類を確認する
nodeType
プロパティを参照するとノードの種類を確認することができる。node.nodeType
1 ELEMENT_NODE 要素ノード
2 ATTRIBUTE_NODE 属性ノード
3 TEXT_NODE テキストノード
4 CDATA_SECTION_NODE CDATAセクション
5 ENTITY_REFERENCE_NODE 実体参照
6 ENTITY_NODE 実体宣言
7 PROCESSING_INSTRUCTION_NODE 処理命令
8 COMMENT_NODE コメントノード
9 DOCUMENT_NODE ドキュメント
10 DOCUMENT_TYPE_NODE ドキュメントタイプ
11 DOCUMENT_FRAGMENT_NODE ドキュメントの断片
12 NOTATION_NODE 記法
<p>今日は外でランチを食べました</p>
<div id="blog">
<p>朝から外出していたのでランチは外で頂きました。</p>
<p>場所:港区南青山</p>
<p>店名:リストランテ南青山</p>
</div>
<button onClick="getElements();">要素を取得</button>
<script>
function getElements() {
let elements = document.getElementById("blog");
let children = elements.childNodes;
let len = children.length;
for (let i = 0; i < len; i++) {
console.log(children.item(i).nodeType);
}
}
</script>
</body>
// 3
// 1
// 3
// 1
// 3 このように取得できる。必要に応じてこれを活かして文字列に変換する
ノードの名前を取得
node.nodeName
<!DOCTYPE html>
<html>
<body>
<p>This is a paragraph.</p>
<h1>This is a heading.</h1>
</body>
</html>
// ページ内の要素を取得
let paragraphElement = document.querySelector("p");
let headingElement = document.querySelector("h1");
// nodeNameプロパティを使用して要素の名前を取得
let paragraphName = paragraphElement.nodeName;
let headingName = headingElement.nodeName;
// 結果をコンソールに表示
console.log("段落要素の名前: " + paragraphName);
console.log("見出し要素の名前: " + headingName);
// 段落要素の名前: P
// 見出し要素の名前: H1
ノードの値を参照
node.nodeValue
let paragraph = document.querySelector("p");
let textInsideParagraph = paragraph.firstChild.nodeValue;
console.log(textInsideParagraph);
// This is a paragraph.
let new = paragraph.firstChild.nodeValue = "新しいテキスト";
console.log(new);
// 新しいテキスト
ノードの値を設定
nodeValue
プロパティは参照するだけではなく新しい値を設定することもできる。node.nodeValue = 'value'
let paragraph = document.querySelector("p");
let textInsideParagraph = paragraph.firstChild.nodeValue;
console.log(textInsideParagraph);
// This is a paragraph.
let textInsideParagraph
ノード内のテキストを取得・設定(textContent)
textContent
プロパティを参照すると、対象のノードに含まれるテキストを取得する。node.textContent
<div>
<p>要素1</p>
<p>要素2</p>
</div>
textContent
で取得すると要素1
と要素2
が取得できる。node.textContent = 'value'
変換前: <p>サンプル</p>
変換後: <p>サンプル</p>
要素内のレンダリングされたテキストを取得・設定(innerText)
テキストを参照する
htmlElement.innerText
タグで改行が行わている場合は改行された状態でテキストを取得<div>
<p>サンプル1<br>サンプル2</p>
<p>サンプル3</p>
</div>
innerText
で取得すると以下のようになる。サンプル1
サンプル2
サンプル3
新しいテキストを設定する
htmlElement.innerText = 'value'
<body>
<div id="test">ここが変化するよ〜</div>
<button onClick="textchage();">テキストが変わる魔法ボタン</button>
<script>
function textchage() {
let element = document.getElementById("test");
element.innerText = "ほら、変わった!";
}
</script>
</body>
HTML文を参照する(innerHTML)
element.innerHTML
<div id="test">
<p>サンプル1<br>サンプル2</p>
<p>サンプル3</p>
</div>
let elements = document.getElementById("test")
console.log("element.innerHTML")
<p>サンプル1<br>サンプル2</p>
<p>サンプル3</p>
<div id="test">
の要素の中身を取得するので、外側のdiv
タグは含まれない。取得した要素の内側にdiv
タグがあればもちろん含まれる。新しいHTML文を設定する
element.innerHTML = 'value'
<body>
<div id="test">ここをh1タグの見出しに変えます</div>
<button onClick="setTitle();">ここを押したら変わるよ</button>
<script>
function setTitle() {
let element = document.getElementById("test");
element.innerHTML = "<h1>でかい見出しになった!!</h1>";
}
</script>
</body>
要素自身も含めたHTML文を参照する(outerHTML)
outerHTML
プロパティを参照すると要素と要素に含まれる HTML 文を取得できる<div>
<p>サンプル1<br>サンプル2</p>
<p>サンプル3</p>
</div>
outerHTML
で取得すると以下のようになる。そのままになる。<div>
<p>サンプル1<br>サンプル2</p>
<p>サンプル3</p>
</div>
要素の属性値を取得・設定(getAttribute,setAttribute)
属性値を取得
element.属性名
let element = document.getElementById(test');
console.log(element.children[0].href);
console.log(element.children[1].className);
console.log(element.children[1].title);
console.log(element.children[1].href);
undefined
属性値を設定
element.属性名 = 'value'
let element = document.getElementById('test');
element.class = 'test';
let element = document.getElementById('shopinfo');
console.log(element.children[0].getAttribute('href'));
console.log(element.children[1].getAttribute('class'));
属性値を取得(getAttributeメソッド)
getAttribute
メソッドがある。指定した属性名の属性値を取得する。element.getAttribute(qualifiedName)
属性値を設定(setAttributeメソッド)
書き方
element.set Attribute(qualifiedName, value)
let element = document.getElementById(' test');
element.setAttribute('class', 'test'); // 新たにclass属性をtestとして設定
要素にせってされている属性を削除(removeAttribute)
書き方
element.removeAttribute(qualifiedName)
ノードを子ノードの中の先頭または最後に追加(prepend,append,appendChild)
ノードを子ノードの先頭に追加する(prepend)
parentnode.prepend(node[,node,...])
prepend
メソッドはノードを子ノードの先頭に追加する。
let child = document.createElement('p');
child.prepend('テスト');
let parentnode = document.getElementById('test');
parentnode.prepend(child);
ノードを子ノードの最後に追加する(append)
parentnode.append(node[,node,...])
ノードを子ノードの最後に追加する(appendChild)
appendChild
メソッドはノードを子ノードの最後に追加する。parentnode.appendChild(node)
ノードを子ノードの中の指定ノードの前または後ろに追加(before,insertBefore,after)
ノードを子ノードの中の指定ノードの前に追加する(before)
before
メソッドはノードを子ノードの中の指定ノードの前に追加する。childnode.before(node[,node,...])
let childnode = document.getElementById('test');
let child = document.createElement('li');
child.append('要素を前に追加');
childnode.before(child);
ノードを子ノードの中の指定ノードの前に追加する(insertBefore)
parentnode.insertBefore(node, childnode)
<body>
<ul id="list">
<li id="test1">要素1</li>
<li id="test2">要素2</li>
</ul>
<button onClick="getElement();">ノードを追加</button>
<script>
function getElement() {
let child = document.createElement("li");
child.append("追加する要素");
let parentnode = document.getElementById("list");
let childnode = document.getElementById("test2");
parentnode.insertBefore(child, childnode);
}
</script>
</body>
ノードを子ノードの中の指定ノードの後に追加する(after)
childnode.after(node[,node,...])
after
メソッドはノードを子ノードの中の指定ノードの後に追加する <body>
<ul id="list">
<li id="test1">要素1</li>
<li id="test2">要素2</li>
</ul>
<button onClick="getElement();">ノードを追加</button>
<script>
function getElement() {
let child = document.createElement("li");
child.append("追加する要素");
let childnode = document.getElementById("test2");
childnode.after(child);
}
</script>
</body>
既存のノードを追加する
<body>
<ul id="list">
<li id="test1">要素1</li>
<li id="test2">要素2(これを要素4の後ろに追加する)</li>
</ul>
<ul id="list2">
<li id="test3">要素3</li>
<li id="test4">要素4</li>
</ul>
<button onClick="getElement();">ノードを追加</button>
<script>
function getElement() {
let child = document.getElementById("test2");
let childnode = document.getElementById("test4");
childnode.after(child);
}
</script>
</body>
ノードを別のノードに置換(replaceWith)
ノードを別のノードに置き換える(replaceWith)
childnode.replaceWith(node[,node,...])
<body>
<ul id="list">
<li id="test1">要素1</li>
<li id="test2">要素2(これを置き換える)</li>
</ul>
<button onClick="getElement();">ノードを追加</button>
<script>
function getElement() {
let child = document.createElement("li");
child.append("置き換わった!");
let childnode = document.getElementById("test2");
childnode.replaceWith(child);
}
</script>
</body>
ノードを削除(remove, removeChild)
ノードを削除する(remove)
childnode.remove()
let childnode = document.getElementById('removeId');
childnode.remove();
ノードを削除する(removeChild)
<script>
function getElement() {
let parentNode = document.getElementById("list");
parentNode.removeChild(parentNode.lastElementChild);
}
</script>
HTMLを表す文字列からノードを作成し指定の位置に追加(insertAdjacentHTML)
insertAdjacentHTML
メソッドを使用すると、引数に指定した文字列を HTML 文として解析し、 HTML 文から作成したノードを指定した位置に追加することができる。element.insertAdjacentHTML(position, text)
第一引数にしていできる値
'beforebegin'
element の前に追加
'afterbegin'
element の子要素の先頭に追加
'beforeend'
element の子要素の最後に追加
'afterend'
element の後に追加
実例
<body>
<ul id="list">
<li id="test1">要素1</li>
<li id="test2">要素2</li>
</ul>
<button onClick="getElement();">ノードを追加</button>
<script>
function getElement() {
let element = document.getElementById("list");
element.insertAdjacentHTML("beforeend", "<li>追加されました!</li>");
}
</script>
</body>
現在処理を実行しているscript要素を取得(currentScript)
<script>
要素を取得する <body>
<script>
let element = document.currentScript;
console.log(element);
</script>
</body>
<script>
let element = document.currentScript;
console.log(element);
</script>
<body>
<script>
let element = document.currentScript;
element.insertAdjacentHTML("beforebegin", "<p>取得したScriptタグに要素を追加</p>");
</script>
</body>
ドキュメントにHTMLを表す文字列を書き込む(write)
document.write(string)
<body>
<script>
document.write("<p>書き込みました</p>");
</script>
</body>
書き込みました
と表示される。