— javascript, tutorials — 1 min read
前回は配列と制御構文についてやりました。変数・関数・オブジェクト・配列・if・forについて見てきましたが、いかがでしたか。
実は、JavaScriptの基本構文に関しては、これまでの内容で8割くらい解説しました。まだ理解が曖昧な部分があると思いますが、細かい部分に関してはこれからの実践を通して身につけていきましょう。
前回 +JavaScript道場:九日目 / 配列と制御構文 for
今回は「DOM操作」です。これを理解するには今までやってきた基礎の部分が非常に重要です。
getElementsByTagName
・getElementById
・getElementsByClassName
など「Document Object Model」の頭文字をとったものです。
要するに、 Web上の文書(HTML)をオブジェクトとして表現(モデリング≒データとして扱えるように構造化)したもの のことです。少し分かりにくいですね。順に説明していきます。
JavaScriptは動的なページを作成するために使われることが非常に多いのですが、その動的なページを作るためにはDOMの知識が必須です。
DOMを使いこなせるようになれば、JavaScriptの威力をすぐに実感できるでしょう!
こういったことを実現するためには、JavaScriptが不可欠です。(一部CSSのみでも実現できます)
JavaScriptが実際にどう役に立っているか、詳しくはこちらのNoteを見ていただくのがいいと思います!弊社社員の記事ですが、おすすめです。
適当なwebページに遷移して、下記のコードをコンソールで実行してみてください。
1// 試してみよう2// 適当なwebページを開いて、コンソールタブで実行する3document.body.innerHTML = "<img src="https://news.walkerplus.com/article/205022/1259246_615.jpg">"
URLを確認してください、別のページに遷移したわけではありません。 HTMLのbody要素全体が、画像に書き換えられているのです。 これがDOM操作です。
noteの売り上げを改竄したり、いいね数を改竄するのは朝飯前です。誰でも出来ます。 (このくらいはJavaScript使わなくても、検証ツール使えれば小学生でも出来ますが・・・)
悪用している自称インフルエンサーが多数います、騙されないように注意!
改竄前
改竄後(180万円の売り上げ!)
ツリー構造 - 親子のように辿っていける構造。1つの親に対して複数の子を持ち、世代が下がるにしたがって枝分かれして広がっていく構造のことです。 例:HTMLのbodyタグにdivタグがあって、その配下にh1タグとpタグがある、みたいな構造のことです。
難しく考えなくて大丈夫です。(下図を参照のこと)
ツリー構造とは、親子のように辿っていける構造のことです。1つの親に対して複数の子を持ち、世代が下がるにしたがって枝分かれして広がっていく構造のことです。 例:HTMLのbodyタグにdivタグがあって、その配下にh1タグとpタグがある、のような構造のことです。
難しく考えなくて大丈夫です。「親から子へ、子から親へちゃんと辿っていける様に考えられた構造なんだ」くらいに考えておいてください。
1// pattern1 と pattern2 , pattern3 は同じ2// consoleで試してみよう3 4// ----- pattern1 -----5var obj = {6 name: "松田",7 company: {8 name: "株式会社X-HACK",9 address: "東京都目黒区目黒2-11-3 印刷工場1F"10 }11}12 13// ----- pattern2 -----14var company = {15 name: "株式会社X-HACK",16 address: "東京都目黒区目黒2-11-3 印刷工場1F"17}18var obj = {19 name: "松田",20 company: company21}22 23// ----- pattern3 -----24var name = "松田"25var company = {26 name: "株式会社X-HACK",27 address: "東京都目黒区目黒2-11-3 印刷工場1F"28}29var obj = { name, company }
1var pet1 = { name: "たま", age: 3, type: "アメリカンポリダクティル" }2var pet2 = { name: "アン・ルイス", age: 22, type: "クリリアンボブテイル" }3 4var obj = { name: "松田", pets: [pet1, pet2] }
ここ大事です!では、実践練習です。 必ず手元で実行して動作を確認してくださいね!
1<html>2 <head>3 <title>Page Title</title>4 </head>5 <body id="top">6 <h1>This is a heading</h1>7 <p class="main my-class">This is a paragraph</p>8 </body>9</html>
1var my_html = {2 head: { title: "Page Title" },3 body: {4 id: "top",5 h1: { text: "This is a Heading" },6 p: { text: "This is a paragraph.", classes: ['main', 'my-class'] }7 }8}9 10// h1 オブジェクト11console.log(my_html.body.h1)12console.log(my_html.body.p.text)13console.log(my_html.body.p.classes)
ここから先はリンクからスタバのページに遷移して、コンソールで試していきます。 スタバのページを開いて準備してください。
スタバのページを開く
→ https://product.starbucks.co.jp/goods/?nid=mm
準備はいいですか?
スタバのページのコンソールでJavaScriptを実行する
1// スタバのページで試してみよう!!2 3// スタバのページの商品を全て取得して・・・・・・?4var images = document.getElementsByTagName('img')5 6for(var n=0; n < images.length; n++){7 images[n].src = "https://news.walkerplus.com/article/205022/1259246_615.jpg"8}
どうでしょうか?商品が犬の画像に変わりました! before after
1var images = document.getElementsByTagName('img')
変数images
に何が入っているか、コンソールで確認してみよう。
1console.log(images)
MDNで getElementsByTagName
について調べてみよう
1// 試してみよう2// 適当なwebページを開いて、コンソールタブで実行する3 4document
1// 試してみよう2 3document.title // "タンブラー&グッズ|スターバックス コーヒー ジャパン"4document.title = "いぬちゃんグッズ販売所"
DOMを操作すると、JavaScriptでHTMLを動的に書き換えられる。そのページの画像のリストを全部取得することも朝飯前。
getElementById
Element
と単数形になっていることに注意getElementsByTagName
Elements
と複数形であることに注意getElementsByClassName
Elements
と複数形であることに注意次回もDOM操作の続きです
ここの知識があれば、Webページから自動でデータを取得するスクレイピングなどを実施する際にも役に立ちます