閲覧ありがとうございます。
状況
‐ contenteditableでのインライン要素指定についてこの回答内容をもとにブロックエディタを作成しています。
- 上記のインライン要素を指定する際に
javascript
1let r = getSelection().getRangeAt(0); 2let newSpan = document.createElement('span'); 3newSpan.dataset.italic = 'true'; 4newSpan.appendChild(r.extractContents()); 5r.insertNode(newSpan);
でインライン要素をしています。
- この方法では
<span>
の階層が増えてしまい,構造が複雑になってしまいます。
解決したい内容
- 下記のようなHTMLをJavaScriptを用いてJSONで簡単に表したい。
- 子要素の階層は無限にあり得る。(下記のHTMLでは,BoldItalicのノードにも子要素や孫要素がある可能性がある。)
html
1<div> 2 <span data-bold="true"> 3 Bold 4 </span> 5 <span data-italic="true"> 6 <span data-bold="true"> 7 BoldItalic 8 </span> 9 Italic 10 </span> 11</div>
json
1{ 2 0:{ 3 "text":"Bold",//タグ内の文字列 4 "bold":true 5 }, 6 1:{ 7 "text":"BoldItalic", 8 "bold":true,//親要素の属性も含める 9 "italic":true 10 }, 11 2:{ 12 "text":"Italic", 13 "italic":true 14 } 15}
お願いしたい解決内容
- 子要素が有限な階層であればできるのですが,階層の数がわからず能力不足でできません。上記のHTMLをもとにJSONに変換する方法
- DOMを操作し,下記のコードのように簡単なHTMLにする方法
html
1<div> 2 <span data-bold="true"> 3 Bold 4 </span> 5 <span data-italic="true" data-bold="true"><!--親要素のdata-italicも継承--> 6 BoldItalic 7 </span> 8 <span data-italic="true"> 9 Italic 10 </span> 11</div>
のどちらかの方法(もしくはほかの方法)のアドバイスをいただければと思います。
ご指南の程よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー