LoginSignup
3
1

More than 3 years have passed since last update.

[自由研究]contenteditable属性のテキストをJavaSctiptで取得してみた

Last updated at Posted at 2019-08-09

8月になり自由研究の季節がやってきましたね。
小学生・中学生の頃は貯金箱やら万華鏡やらありふれたものを作っていました。

研究テーマ

ところで皆さんはHTML5のcontenteditable属性をご存じでしょうか?

一言で言えば、「テキスト文を編集できるようにするもの」です。

スクリーンショット 2019-08-09 11.16.54.png

そして今回、contenteditable属性で編集したテキストをJavaScriptでテキストを取得した時、ブラウザごとに挙動がどうなるかを調べたのでそれを自由研究としたいと思います。

用意したもの(検証ブラウザ)

Chrome:75.0.3770.142
Safari:12.1.2 (14607.3.9)
Firefox:68.0.1 (64 ビット)

実験内容

ブラウザごとに下記のようにしてHTML要素のテキストを取得してみる。
(1)テキストを消して空にした場合
(2)空にしたあとテキストを入力した場合
(3)テキストをコピーしてペーストした場合

方法

JSでのテキスト取得には下記の3パターンを用いました。

innerHTML
innerText
textContent

いずれもテキスト内容を取得するものですがそれぞれ挙動が少し異なります。

innerHTML
オブジェクト内のHTML要素を取得する

innerText
オブジェクト内の文字列を取得して見やすいように変換してくれる

textContent
オブジェクト内の文字列をHTMLに書かれている通りに取得する

sample.html
<div id="text1" contenteditable="true">こんにちは</div>
<button onclick="checkText()">ボタン</button>
sample.js

function checkText(){
  var text1 = document.querySelector("#text1");

  console.log(text1.innerHTML);
  console.log(text1.innerText);
  console.log(text1.textContent);
}

結果

上記のコードで(1)〜(3)をブラウザごとに実行した結果が以下になります。

(1)空にした場合

[Chrome]
""
""
""
[Safari]
"<br>"
"
" // 改行
""
[Firefox]
"<br>"
"
" // 改行
""

(2)空にしたあとテキストを入力した場合

[Chrome]
"こんにちは"
"こんにちは"
"こんにちは"
[Safari]
"こんにちは"
"こんにちは"
"こんにちは"
[Firefox]
"こんにちは<br>"
"こんにちは
"
"こんにちは"

(3)テキストをコピペした場合

[Chrome]
"こんにちは"
"こんにちは"
"こんにちは"
[Safari]
"こんにちは<br>"
"こんにちは
"
"こんにちは"
[Firefox]
"こんにちは"
"こんにちは"
"こんにちは"

考察

Chromeではテキストの取得方法に関わらず全て同じでした。
一方、SafariとFirefoxでは取得方法によって内容が異なることがわかりました。

もし、contenteditable属性を使ってテキスト内容をチェックする際は注意が必要ですね
(テキストが空かどうかの条件分岐など。ブラウザによって結果が異なってしまう。)

コードの詳細

CodePenにもまとめました

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1