質問編集履歴

5

誤字修正

2022/02/21 03:17

投稿

puppet_master
puppet_master

スコア24

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ブラウザベースでのWYSIWYGエディタをJavaScript で開発中です。オープンソースのWYSIWYGエディタも試してみましたが、DBやS3へのデータ格納の為の改造が必要であまり省力化にならないため、自作で機能を絞って実装する方向に舵を切っています。
4
4
 
5
- 以下の操作でリンク挿入できる機能を実装しました
5
+ 以下の操作でリンク挿入できる機能を開発てい
6
6
  1. contenteditableのエディタ領域上でリンクで囲みたい文字列を選択
7
7
  2. エディタ領域外に配置したリンク挿入ボタンをクリック
8
8
  3. モーダルがポップアップし、URL入力フィールドにURLを入力し、挿入ボタンをクリック

4

質問テンプレートを適用しました。

2022/02/21 03:14

投稿

puppet_master
puppet_master

スコア24

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,5 @@
1
+ ### 前提・実現したいこと
2
+
1
3
  ブラウザベースでのWYSIWYGエディタをJavaScript で開発中です。オープンソースのWYSIWYGエディタも試してみましたが、DBやS3へのデータ格納の為の改造が必要であまり省力化にならないため、自作で機能を絞って実装する方向に舵を切っています。
2
4
 
3
5
  以下の操作でリンク挿入できる機能を実装しました。
@@ -6,16 +8,18 @@
6
8
  3. モーダルがポップアップし、URL入力フィールドにURLを入力し、挿入ボタンをクリック
7
9
  4. contenteditableのエディタ領域上の囲んだ文字列がリンクで囲まれた状態になる
8
10
 
11
+ ### 発生している問題・エラーメッセージ
9
- 困っているのは、3でURLを入力するとgetSelentionで選択されているのがモーダルになってしまい、4でのリンク挿入が行われません。
12
+ 困っているのは、3でURLを入力するとgetSelentionで選択されているのがモーダルになってしまい、4でのリンク挿入が行われません。その後もう一度リンク挿入ボタンをクリックして、モーダルのURLを変更せずに挿入ボタンをクリックすると、リンクの挿入はうまくいきます。
10
13
 
11
14
  このため2の操作で選択範囲自体を保存し、4の操作の前に再度同じ範囲が選択された状態にしてから、リンクで囲むようにしたいと思っています。
12
-
13
15
  このような実装を行いたい場合、どのメソッドなどを使えばよいかご教示いただけますか?
14
16
  調べてはみたのですが、当てはまるようなサンプルが見当たらず困っております。
15
17
  もちろん、上記手順での操作が可能であれば、別のアプローチでのアドバイスも頂けると大変ありがたいです。
16
18
 
17
- 該当箇所のソースを以下に添付します。
19
+ ### 該当のソースコード
20
+ 3で挿入ボタンをクリックすると呼ばれる処理が以下になります。
18
21
  ```javascript
22
+ function add_link(){
19
23
  var link_url = document.getElementById('textarea_link_url').value;
20
24
 
21
25
  var sel = window.getSelection();
@@ -24,8 +28,13 @@
24
28
  newNode.href=link_url;
25
29
  var dom=range.cloneContents();
26
30
  newNode.appendChild(dom);
27
- range.deleteContents(); // 範囲選択箇所を一旦削除
31
+ range.deleteContents();
28
32
  range.insertNode(newNode);
29
33
 
30
34
  sel.removeAllRanges();
35
+ }
31
36
  ```
37
+
38
+ ### 試したこと
39
+ getSelectionの返り値を格納するselや、getRangeAt(0)の返り値を格納するrangeについては、別のグローバル変数に格納して試してみましたが、モーダル上でURLを入力すると別の変数になっているはずが、その変数側もモーダル自体が選択された状態に中身が変わってしまいました。
40
+

3

該当箇所のソースを追加しました。

2022/02/20 06:35

投稿

puppet_master
puppet_master

スコア24

test CHANGED
File without changes
test CHANGED
@@ -13,3 +13,19 @@
13
13
  このような実装を行いたい場合、どのメソッドなどを使えばよいかご教示いただけますか?
14
14
  調べてはみたのですが、当てはまるようなサンプルが見当たらず困っております。
15
15
  もちろん、上記手順での操作が可能であれば、別のアプローチでのアドバイスも頂けると大変ありがたいです。
16
+
17
+ 該当箇所のソースを以下に添付します。
18
+ ```javascript
19
+ var link_url = document.getElementById('textarea_link_url').value;
20
+
21
+ var sel = window.getSelection();
22
+ var range = sel.getRangeAt(0);
23
+ var newNode = document.createElement('a');
24
+ newNode.href=link_url;
25
+ var dom=range.cloneContents();
26
+ newNode.appendChild(dom);
27
+ range.deleteContents(); // 範囲選択箇所を一旦削除
28
+ range.insertNode(newNode);
29
+
30
+ sel.removeAllRanges();
31
+ ```

2

誤字修正しました

2022/02/20 02:52

投稿

puppet_master
puppet_master

スコア24

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ブラウザベースでのWYSIWYGエディタをJavaScript で開発中です。オープンソースのWYSIWYGエディタも試してみましたが、DBやS3へのデータ格納の為の改造が必要であまり省力化になため、自作で機能を絞って実装する方向に舵を切っています。
1
+ ブラウザベースでのWYSIWYGエディタをJavaScript で開発中です。オープンソースのWYSIWYGエディタも試してみましたが、DBやS3へのデータ格納の為の改造が必要であまり省力化にならないため、自作で機能を絞って実装する方向に舵を切っています。
2
2
 
3
3
  以下の操作でリンク挿入できる機能を実装しました。
4
4
  1. contenteditableのエディタ領域上でリンクで囲みたい文字列を選択

1

初心者アイコンを追加しました

2022/02/20 02:36

投稿

puppet_master
puppet_master

スコア24

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- ブラウザベースでのWYSIWYGエディタをJavaScript で開発中です。オープンソースのWYSIWYGエディタも試してみましたが、DBやS3へのデータ格納の為の改造が必要になるため、自作で機能を絞って実装する方向に舵を切っています。
1
+ ブラウザベースでのWYSIWYGエディタをJavaScript で開発中です。オープンソースのWYSIWYGエディタも試してみましたが、DBやS3へのデータ格納の為の改造が必要であまり省力化になるため、自作で機能を絞って実装する方向に舵を切っています。
2
2
 
3
3
  以下の操作でリンク挿入できる機能を実装しました。
4
4
  1. contenteditableのエディタ領域上でリンクで囲みたい文字列を選択