JavaScriptでHTMLを書き換えるinnerHTML 結城永人 -2018年9月11日 HTMLのマークアップをJavaScriptのプログラミングで書き換える、またはサイトのソースコードを置き換えるにはinnerHTMLが良く使われる。 Element.innerHTML プロパティは、要素の子孫を記述する HTML 構文を設定または取得します。 element.innerHTML|MDN|Mozilla innerHTMLはElementインターフェースのDOMString(文字列)型のプロパティで、サイト上の要素内容のマークアップを表す。 JavaScriptでは他にも似たようなプロパティのinnerTextやtextContentがあって――どちらもNodeインターフェースのDOMString型に含まれる――プレーンテキスト(HTMLなどのマークアップ言語を含まない)を設定取得できる。双方にはCSSで非表示のコンテンツを知覚するかしないなどの細かい違いがあるけれども機能そのものには大差がないみたいだ。ただしブラウザによって前者は挙動にバラ付きが多くて後者はさほどでもないからJavaScriptでサイトのプレーンテキストを書き換えるためにはinnerTextよりもtextContentが一般的に使い易いかも知れない。 innerHTMLプロパティはプレーンテキストだけではなくてHTMLなどのマークアップ言語も設定取得できるのが便利だ。しかし例えばHTMLの開始タグの「<」や終了タグの「>」が挿入されると他のタグに影響してマークアップが崩れるような状況が起こり得る。加えて何等かの仕方で、JavaScriptプログラムに支障を来さないともかぎらないからサイト内容を書き換える際には特に配慮して使わなくてはならない。 HTMLを書き換えるJavaScriptプログラミング サイト内容を呼び出すgetElementById()などのメソッドとinnerHTMLを組み合わせて記述する。 サンプルのソースコード HTML <p id="change"> 書き換え前の文章 </p> <input type="button" value="ボタン" onclick="pid()"> JavaScript var pid = function(){ document.getElementById("change").innerHTML = "<b>書き換え後の文章</b>"; } サンプルの実行結果 書き換え前の文章 変数に対しては構文を二つに分けて記述して構わない。 var test = document.getElementById("change"); test.innerHTML = "<b>書き換え後の文章</b>"; innerHTMLの文字列に他の変数を追加するには連結の演算子の「+」を使う。 var ins = "挿入句"; document.getElementById("change").innerHTML = "<b>書き換え" + ins + "後の文章</b>"; サイト内容を呼び出す六種類のメソッド JavaScriptにはDOMのノード:HTMLやXMLを取り扱うAPIの階層を指定してサイト内容を呼び出すメソッドがあってinnerHTMLプロパティなどで書き換えるのに役立つ。 getElementsByTagName("タグ")指定された全てのタグの項目を返すgetElementById("id")指定された一つのidの項目を返すgetElementsByClassName("class")指定された全てのclassの項目を返すgetElementsByName("name")指定された全てのnameの項目を返すquerySelector("セレクター")指定された先頭のセレクターの項目を返すquerySelectorAll("セレクター")指定された全てのセレクターの項目を返す ※セレクターの記述はタグやidならば「#」付きやclassならば「.」付きなどを使ってCSSのstyleタグでの指定と同様に行う。 サイト作成で、idはページに一つしか使用しない通り、メソッドで指定して呼び出す場合も一つしか当て嵌まらない。そしてquerySelector(Allなし)も当て嵌まるのは同じように一つだけで、サイトのDOMに同名のセレクターがタグかclassで、複数、存在するとしても先頭が対象になる。他の四種類のタグとclassとnameとquerySelectorAllのセレクターは幾つも含まれる場合があってメソッドで呼び出すと配列のような項目のリストのHTMLCollection(集合)になる。サイトのDOMに一つしかない場合でも複数の項目の状態で、返されるからプログラミングでの扱いには注意しなくてはならない。 追記:HTMLCollectionを通常の配列として扱うにはサイト内容を取得する際にslice()メソッドで[].slice.call(サイト内容を呼び出すメソッド)かスプレッド構文で[...サイト内容を呼び出すメソッド)]という形で記述する。 slice()メソッドの例_document.getElementsByTagName("p")ならば[].slice.call(document.getElementsByTagName("p"))となる。 スプレッド構文の例_document.getElementsByTagName("p")ならば[...document.getElementsByTagName("p")]となる。 HTMLCollectionから書き換えるサイト内容を選ぶ サンプルのソースコード HTML <p class="change"> 書き換え前の文章 </p> <input type="button" value="ボタン" onclick="pclass()"> JavaScript var pclass = function(){ document.getElementsByClassName("change").item(0).innerHTML = "<b>書き換え後の文章</b>"; } サンプルの実行結果 書き換え前の文章 HTMLCollectionの数値の選別にはitemメソッドが使える。他にも角括弧構文が使えるので、サンプルの.item(0)は[0]と記述して構わない。因みに文字列の選別にはnamedItem()メソッドか数値の場合と同様に角括弧構文が使えるらしい。 ソースコードを置き換える場合の注意点 innerHTMLを使うとHTMLなどを文字列として追加できるけど、ところがプログラミングが機能しない記述もあるから注意しなくてはならない。 例えばリンクタグのaによってURLを指定するような場合にソースコードに半角引用符を使うとinnerHTMLの記述の半角引用符と被ってプログラムが途中から動かなくなってしまう。 半角引用符の重複を避ける二つの方法 一重と二重を使い分ける element.innerHTML = "<a href='https://example.com/'>リンク</a>"; または element.innerHTML = '<a href="https://example.com/">リンク</a>'; 実体参照でエスケープする element.innerHTML = "<a href="https://example.com/">リンク</a>"; または element.innerHTML = '<a href='https://example.com/'>リンク</a>'; 文字実体参照の半角二重引用符が「"」で、半角一重引用符が「'」に相当するけど、あるいは数値実体参照の「"」や「'」を使って記述しても大丈夫だ。 innerHTMLプロパティは取り込んだサイト内容を完全に上書きするから元の状態を部分的に残すような使い方はできない。 一部を書き換えるには書き換えない部分も含めて全体的に行うか、HTMLのマークアップを目的に合わせて呼び出せるように区画タグのspanなどにidやclassなどを付けて予め細かく区切っておく。 コンテンツを新たに追加するだけならば又別にappendChildやinsertAdjacentHTMLを使ってプログラムを組むのが適しているだろう。 コメント 新しい投稿 前の投稿
イヤーワームという頭の中で音楽が勝手に流れる現象を引き起こすストレスを反省 以前から頭の中で音楽が勝手に流れることが良くあって近頃でもブログで取り上げたばかりの モーツァルトの幻想曲K.397 や K.375 や ribbonの Virgin Snow などを体験していた。いつも好きな曲ばかりで鼻歌を伴って喜ばしい気持ちになるし、好調の証のように捉えてい...
芦名星のたぶん本当の死因 芦名星は自殺した。その前後、 三浦春馬と竹内結子の自宅のクローゼットでの首吊りという同じ仕方での連続自殺 があり、他殺の陰謀論も思い浮かぶけど、しかし違うのではないか。今の 日本の芸能界には死にたくなる気持ち悪さがある し、芸能人が裕福な生活でも自殺することはさほど不思議ではない...
幸せの良さはインパクトが物凄く大きいために人々の印象にも残り易いと考える ブログのヘッダーの背景画像を変更した。無料素材の クリスティン・フォークトの写真 を使っている。 Pexelsで見付けるや否や本当に素晴らしく気に入ってしまった A woman in snowflakes by Kristin Vogt / Pexels 雪の中で紺...
アガサ・クリスティの誘拐された総理大臣の日本語訳 十九から二十世紀のイギリスの作家、小説家の アガサ・クリスティ の小説の 誘拐された総理大臣 (1923)の日本語訳を行った。一つの文学作品として人間の洞察力に富んだ優れた内容を持つだけではなく、表現も意義深いから外国語の英語の聞き取りと読み取りの教材としても最適だと感じる。 ...
Imgurで画像URLと埋め込みコードを取得する方法 Imgur は自分でアップロードした画像については画像URL/直リンクを取得して他のサイトにHTMLのimgタグで表示させられる。 そして自分と他の人たちも含めて画像の埋め込みコードを取得して他のサイトのHTMLに、そのまま、記載して表示させられもする。 目次 Img...
俳句の規則:字数と季語と切れ字 概要 俳句の規則 俳句は、十七文字という短い詩の中で、季節を感じさせる言葉(季語)を使い、切れ字で語調を整えて表現する伝統的な日本の文学形式です。 句の基本的な構成要素 字数を十七文字に揃える:俳句は大きく三つの部分に分けられる。上句(かみく)と中句(なかく)...
日常の些細な出来事に触れる幸せの味わいは小さいというイメージが欠かせない 誰にでも分かる些細な日常というと他でもなく、小さな幸せの味わいではないか。 永遠の詩人として本質的な認識に基づく命の尊さを伝え届けなくてはならないと考えるけれどもアクセスアップのためには誰にでも分かる些細な日常のイメージも大事にするべきだろう。 小さな幸せの味わいをどこま...
シソンヌのラーメン屋:とんこつラーメンを臭いラーメンと呼んだコントが好き シソンヌ (お笑い)のラーメン屋のコントが面白かった。とんこつラーメンを臭いラーメンと呼ぶから僕も同じだったと気付いた。 シソンヌのラーメン屋 (Google検索) 否、店によってはそばを通りかかるだけでも堪らないくらい臭いから、一体、何だろうと本当に思わずにはいられなか...
今春に咲き出した桜の花の写真を幾つか撮って来た サイバーショットのW170を使った。七八年前のコンパクトカメラで、 一眼カメラのα5100を買って お役後免の状態に差しかかっているけど、どうするかと考えてしまわざるを得ない。画質としては力強い。画素数が10.1MPで、レンズがカールツァイスということで、写真の風合いが凄いと...
キム・テヒの反日活動を日本人としてどこまで許せるか かつて韓国ドラマの IRIS -アイリス- を観て何て綺麗で可愛くて良いんだと一目で度肝を抜かれた俳優に キム・テヒ がいた。 映画『アイリス -THE LAST-』予告編 by TAEWON ENTERTAINMENT from シネマトゥデイ 日本で放映されたのが2...
コメント