質問するログイン新規登録

回答編集履歴

1

ついか

2016/10/07 09:13

投稿

yambejp
yambejp

スコア118102

answer CHANGED
@@ -16,4 +16,56 @@
16
16
  test
17
17
  </body>
18
18
  </html>
19
+ ```
20
+
21
+ # 中途半端な追記
22
+ 半分ギブアップ気味ですが、ご希望もありましたので試したソースを書いておきます
23
+ とくに気に入らないのは(1)の部分chromeでは中身が空文字のpを追加できない感じです
24
+ 半角スペースはもちろん、改行マークやタブでもだめです。
25
+ 苦肉の策で全角スペースをいれましたが美しくないのでなんとも言えません。
26
+ また適当なダミーをいれておいて、プログラムで空に上書きしてもだめっぽいです
27
+ どなたか賢者の方が解決策をもっているかもしれないので広く意見を聞いてみてください
28
+
29
+ (2)のところはタグがほしいのでchildNodeではなくgetElementsByTagNameで
30
+ アクセスさせています。もっといい方法ありそうな気がします
31
+
32
+ 一応、chromeとfirefoxでは動作確認しましたがIEは未調整です
33
+
34
+ ```HTML
35
+ <script>
36
+ document.addEventListener('click',function(e){
37
+ if(e.target.id!=="add") return false;
38
+ var input = document.getElementById('instagram');
39
+ var embedCode = input.value;
40
+ var instagram = document.createElement('div');
41
+ instagram.setAttribute('id', 'media');
42
+ instagram.setAttribute('class', 'media-frame');
43
+ instagram.setAttribute('contenteditable', 'false');
44
+ instagram.innerHTML = embedCode;
45
+ var target = document.getElementById('body-text');
46
+ target.appendChild(instagram);
47
+ var newLine = document.createElement('p');
48
+ newLine.appendChild(document.createTextNode(" "));//(1)ここがどうしようもない
49
+ newLine.setAttribute('contenteditable', true);
50
+ target.insertBefore(newLine, instagram.nextSibling);
51
+ target.focus();
52
+ var sel = window.getSelection();
53
+ var range = document.createRange();
54
+ var nodes=target.getElementsByTagName("*");//(2)手抜きですがなんとか動きます
55
+ range.setStart(nodes[nodes.length -1], 0);
56
+ range.collapse(true);
57
+ sel.removeAllRanges();
58
+ sel.addRange(range);
59
+ input.value = '';
60
+ });
61
+ </script>
62
+ <div id='body-text' class='body-text' contenteditable=true data-placeholder='Body Contents'></div>
63
+ <div class='modal instagram-modal' show={ instagramModal }>
64
+ Embed Instagram
65
+ <label>
66
+ <input type='text' id='instagram' placeholder='Input Instagram embed code'>
67
+ <button id='add'>add</button>
68
+ </label>
69
+ </div>
70
+
19
71
  ```