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

回答編集履歴

3

追記

2019/02/26 05:26

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -99,4 +99,47 @@
99
99
  </script>
100
100
  <div id="d1">入力時に点滅する縦棒(カーソル)が常に先頭に来てしまう。</div>
101
101
  <input type="button" id="btn" value="編集on/off">
102
+ ```
103
+
104
+ # よりjQueryっぽく
105
+ originalEventを使えばよかったですね
106
+
107
+ ```javascript
108
+ <style>
109
+ [contenteditable]{background-Color:yellow;}
110
+ </style>
111
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
112
+ <script>
113
+ $(function(){
114
+ $('#btn').on('click',function(){
115
+ $('#d1').attr('contenteditable',$('#d1').is('[contenteditable]')?null:"true");
116
+ });
117
+ $(document).on('paste input keydown keyup keypress change','[contenteditable]',function(e){
118
+ if(e.type=="paste"){
119
+ e.preventDefault();
120
+ e.stopPropagation();
121
+ var paste = (e.originalEvent.clipboardData||window.clipboardData).getData('text');
122
+ paste = paste.replace(/[\r\n]/g, '');
123
+ const selection = window.getSelection();
124
+ while (selection.rangeCount>0){
125
+ var range=selection.getRangeAt(0);
126
+ range.deleteContents();
127
+ range.insertNode(document.createTextNode(paste));
128
+ selection.removeRange(range);
129
+ }
130
+ }else if(e.which == 13){
131
+ e.preventDefault();
132
+ }else{
133
+ var txt = $(this).text();
134
+ var reg=new RegExp("[\r\n]|<(\"[^\"]*\"|'[^']*'|[^'\">])*>","mig");
135
+ if(txt.match(reg)){
136
+ var replace2 = txt.replace(reg,'');
137
+ $(this).text(replace2);
138
+ }
139
+ }
140
+ });
141
+ });
142
+ </script>
143
+ <div id="d1">入力時に点滅する縦棒(カーソル)が常に先頭に来てしまう。</div>
144
+ <input type="button" id="btn" value="編集on/off">
102
145
  ```

2

chousei

2019/02/26 05:26

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -51,4 +51,52 @@
51
51
  });
52
52
  </script>
53
53
  <div contenteditable="true">入力時に点滅する縦棒(カーソル)が常に先頭に来てしまう。</div>
54
+ ```
55
+
56
+ # 調整版
57
+ ```javascript
58
+ <style>
59
+ [contenteditable]{background-Color:yellow;}
60
+ </style>
61
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
62
+ <script>
63
+ $(function(){
64
+ $('#btn').on('click',function(){
65
+ $('#d1').attr('contenteditable',$('#d1').is('[contenteditable]')?null:"true");
66
+ });
67
+ document.addEventListener('paste', function(e){
68
+ var t=e.target;
69
+ if(t.id=='d1' && t.getAttribute('contenteditable')=="true"){
70
+ e.preventDefault();
71
+ e.stopPropagation();
72
+ var paste = (e.clipboardData||window.clipboardData).getData('text');
73
+ paste = paste.replace(/[\r\n]/g, '');
74
+ const selection = window.getSelection();
75
+ while (selection.rangeCount>1){
76
+ var range=selection.getRangeAt(0);
77
+ range.deleteContents();
78
+ selection.removeRange(range);
79
+ }
80
+ if(selection.rangeCount==1){
81
+ var range=selection.getRangeAt(0);
82
+ selection.getRangeAt(0).deleteContents();
83
+ range.insertNode(document.createTextNode(paste));
84
+ }
85
+ }
86
+ });
87
+ $(document).on("input keydown keyup keypress change",'[contenteditable]',function(e){
88
+ if (e.which == 13) {
89
+ return false;
90
+ }
91
+ var txt = $(this).text();
92
+ var reg=new RegExp("[\r\n]|<(\"[^\"]*\"|'[^']*'|[^'\">])*>","mig");
93
+ if(txt.match(reg)){
94
+ var replace2 = txt.replace(reg,'');
95
+ $(this).text(replace2);
96
+ }
97
+ });
98
+ });
99
+ </script>
100
+ <div id="d1">入力時に点滅する縦棒(カーソル)が常に先頭に来てしまう。</div>
101
+ <input type="button" id="btn" value="編集on/off">
54
102
  ```

1

chousei

2019/02/25 10:17

投稿

yambejp
yambejp

スコア117944

answer CHANGED
@@ -21,4 +21,34 @@
21
21
  </script>
22
22
  <div contenteditable="true">入力時に点滅する縦棒(カーソル)が常に先頭に来てしまう。</div>
23
23
 
24
+ ```
25
+
26
+ # paste対応
27
+
28
+ ```javascript
29
+ <script>
30
+ $(function(){
31
+ document.querySelector('[contenteditable]').addEventListener('paste', function(e){
32
+ e.preventDefault();
33
+ e.stopPropagation();
34
+ var paste = (e.clipboardData||window.clipboardData).getData('text');
35
+ paste = paste.replace(/[\r\n]/g, '');
36
+ const selection = window.getSelection();
37
+ if (!selection.rangeCount) return false;
38
+ selection.getRangeAt(0).insertNode(document.createTextNode(paste));
39
+ });
40
+ $('[contenteditable]').on("input keydown keyup keypress change", function(e){
41
+ if (e.which == 13) {
42
+ return false;
43
+ }
44
+ var txt = $(this).text();
45
+ var reg=new RegExp("[\r\n]|<(\"[^\"]*\"|'[^']*'|[^'\">])*>","mig");
46
+ if(txt.match(reg)){
47
+ var replace2 = txt.replace(reg,'');
48
+ $(this).text(replace2);
49
+ }
50
+ });
51
+ });
52
+ </script>
53
+ <div contenteditable="true">入力時に点滅する縦棒(カーソル)が常に先頭に来てしまう。</div>
24
54
  ```