質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

137閲覧

連続する同じ要素をまとめる(解決済み)

armadillo

総合スコア7

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/04/19 09:33

編集2020/04/20 10:27

前提・実現したいこと

html

1<strong>1</strong> 2<strong>2</strong> 3<strong>3</strong> 44 5<strong>5</strong>

とあったときに

html

1<strong>123</strong> 24 3<strong>5</strong>

としたい

###実現したい経緯
contenteditableを用いた、エディタを作成している際に、strongエレメントとtextノードが乱立してしまい。狙っている挙動(strongの取付取り外し)ができない場合が発生したため。

###試したこと
調べたとことnormalize()を使用することで回避できるとのことだったが、回避はできなかった

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/19 09:35

HTMLがどのように出力されるかによるのではないでしょうか。 それ次第で、出力後にJavaScriptでわざわざ対応する必要はないかと思います。 あと、自身が調べたこと試したことは必ず記載してください。丸投げの作業依頼です。 質問内容もないです。
armadillo

2020/04/19 09:39

なるほど、直します
m.ts10806

2020/04/19 12:08

ご自身で試したコードを提示してください。 「調べたこと」もキーワードや出典(URL)が提示されないと「そのやり方や記事で解決できるか」誰も判断できませんので、明示してください。
m.ts10806

2020/04/19 12:09

あとできればパターンケースをもっとあげた方がいいかもしれません。 具体例をいくつか。あるパターンに特化した作りをしてしまうと副作用や不具合で使えないということになるので。
armadillo

2020/04/20 10:01

自己解決した際にも手順があったのですね、知らなかったです。教えていただきありがとうございます!
armadillo

2020/04/20 10:03 編集

>あとできればパターンケースをもっとあげた方がいいかもしれません。 具体例をいくつか。あるパターンに特化した作りをしてしまうと副作用や不具合で使えないということになるので。 >ご自身で試したコードを提示してください。 「調べたこと」もキーワードや出典(URL)が提示されないと「そのやり方や記事で解決できるか」誰も判断できませんので、明示してください。 なるほど参考になります
m.ts10806

2020/04/20 10:21

で、いつまで「受付中」なんでしょうか。
armadillo

2020/04/20 10:33

申し訳ないです。解決済みにしました。ご指導していただきありがとうございます
guest

回答2

0

ノードの考え方が甘いですね、テキストノード(命題で言う4のところ)まで取りたいなら
タグとタグの間の改行文字などもすべてテキストノードで取得されることを理解してください

投稿2020/04/20 00:45

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/04/20 00:45

<script> window.addEventListener('DOMContentLoaded', ()=>{ var nodes=document.querySelector('#target').childNodes; console.log(nodes); }); </script> <div id="target"> <strong>1</strong> <strong>2</strong> <strong>3</strong> 4 <strong>5</strong> </div>
armadillo

2020/04/20 10:04

確かに上記のhtmlだとtextノードが入っているようになってますね、developerツールの表示をそのまま持ってきてしまいました。
armadillo

2020/04/20 10:08

なるほど、一度、childNodesを取得しなおすことで、連続する同じ要素同士をつなぐことができるのですね(まちがっていたらすいません)
yambejp

2020/04/20 10:41

ちょっと冗長で例外処理とかとっぱらっていますがこんな感じで <script> window.addEventListener('DOMContentLoaded', ()=>{ var t=document.querySelector('#target'); var orgNodes=[...t.childNodes].filter(x=>{ return x.nodeName!="#text" || !/^\s+$/.test(x.nodeValue); }); t.parentNode.replaceChild(t.cloneNode(false),t); var newNodes=[]; var prev={nodeName:null}; while(n=orgNodes.shift()){ if(n.nodeName!==prev.nodeName){ newNodes.push(n); }else{ newNodes[newNodes.length-1].textContent+=n.textContent; } prev=n; }; newNodes.reduce((x,y)=>(x.appendChild(y),x),document.querySelector('#target')); }); </script> <div id="target"> <strong>1</strong> <strong>2</strong> <strong>3</strong> 4 <div>5</div> <div>6</div> <span>7</span> <span>8</span> <span>9</span> </div>
guest

0

自己解決

javascript

1const parent = document.getElementById("parent"); 2function normalize_all(){ 3 parent.childNodes.forEach(function (currentValue, currentIndex, listObj) { 4 console.log("currentValue.childNodes.length"); 5 console.log(currentValue.childNodes.length); 6 let j; 7 for(let i = 0; i < currentValue.childNodes.length; i++){ 8 j = 1; 9 while(currentValue.childNodes[i].className === currentValue.childNodes[i + j].className){ 10 currentValue.childNodes[i].textContent = currentValue.childNodes[i].textContent + currentValue.childNodes[i + j].textContent; 11 currentValue.removeChild(currentValue.childNodes[i + j]); 12 j ++; 13 } 14 } 15 }); 16}

投稿2020/04/20 10:30

armadillo

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問