ある要素内の文字数を計測しようと以下のようなコードを試したところ
<div> <p>A</p> </div> <script> var hoge = document.querySelector('div'); console.log(hoge.textContent.length); </script>
なぜか 8 が返ってきました…
(すいません 5 でした!)
調べてもわからず、ご教授お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
回答3件
0
改行や空白もカウントしているからでは。
js
1var hoge = document.querySelector('div'); 2console.log(hoge.textContent.length,encodeURIComponent(hoge.textContent)); 3// 5 "%0A%20%20A%0A" 4console.log(hoge.textContent.trim().length,encodeURIComponent(hoge.textContent.trim())); 5// 1 A 6```**動くサンプル:**[https://jsfiddle.net/tkazcxce/1/](https://jsfiddle.net/tkazcxce/1/)
投稿2018/05/08 06:47
編集2018/05/08 06:58総合スコア69645
0
ベストアンサー
pをインデントする文字もカウントしてるのでは?
(改行マークもカウントします)
追記
インデントや改行を除外
javascript
1<div> 2 <p>A</p> 3</div> 4<script> 5var txt = document.querySelector('div').textContent; 6txt=txt.replace(/^\s+|\r|\n/g,""); 7console.log(txt.length); 8</script>
上記行の先頭にある空白文字を削除していますが
場合によってはカウントしたい場合もあるので、ケースバイケースで
除外対象をどうしたいのか検討してください
投稿2018/05/08 06:38
編集2018/05/08 06:57総合スコア118268
ありがとうございます!知りませんでした!
0
#innerHTMLと勘違いしておりました。誤った回答のため、参考にしないようにお願いします。
textContentは指定エレメントの中の「タグを含めた」文字列を取得します。
lengthは文字数を取得します。
合ってますね。
投稿2018/05/08 06:40
編集2018/05/08 06:59総合スコア80892
「タグを含めた」っていうと誤解を生むかもしれません。
タグ自体もhtmlで解釈させるまでは単なる文字列ですしね。
なるほど…!!ではinnerTextの方が文字列取得には良いということですね。ありがとうございます!
2018/05/08 06:46 編集
ちがうよね?
<div><p>A</p></div>
<script>
var hoge = document.querySelector('div');
console.log(hoge.textContent.length);
</script>
で得られるのは「1」だし
innerHTMLとごっちゃにしてませんか?
試してみたらyambejpさんの言う通りでした…
純粋にテキストの数を取得するにはどうしたらよいのでしょうか…
2018/05/08 06:53
> 純粋にテキストの数を取得
インデントや改行マークをしないことです。
もしくはそれらをプログラムで除いた上でカウントしてください
あれ?ごめんなさい。失礼しました。
bfkさん ベストアンサーを移してください。
2018/05/08 06:58
ねんのため追記しておきました
誤った回答である旨を冒頭に記載しました。
mts10806さん yambejpさん
ありがとうございます!ベストアンサー移させていただきました。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
2018/05/08 07:03