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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

12101閲覧

contenteditable上でペーストした際にスタイルを削除する方法

ckaposndbbba

総合スコア210

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

2クリップ

投稿2016/03/06 03:24

こんにちは。

最近、<input type="text"><textarea>の代わりに<div contenteditable="true">を使っています。
いろいろな利点があり、とても便利です。
厄介なのは、ペーストした際にスタイルがそのまま維持されること。
htmlベースなので当たり前ではありますが、ちょっとそこが面倒です。
でもcontenteditableってそういうものか、って今まで見逃してきたのですが。
ツイッターのウェブ版を使っていて、ふとツイートするフォームのソースを覗いてみたら、contenteditableでできていました。
ツイッターウェブ版がcontenteditable
しかし、スタイルが適用されているテキストなどをコピペしても、スタイルが適用されず、素のテキストとして貼り付けられます。
一応自分でもソースを見てみましたが、よくわかりませんでした。
どのような技術が使われているのでしょうか?
説明がわかりにくくて申し訳ありません
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

クリップボード、選択範囲に関してブラウザごとに少し動作が違うので対応が難しいです。
貼り付けイベントを検知したらそれをキャンセルし、貼り付けられようとした内容を取得したあとそれをカーソル位置に挿入するようにすることで実現できます。
次のようなコードで動作を確認しました。IE 8 は知りません。

lang

1<!doctype html> 2<html> 3<body> 4 <div id="area" contenteditable>テスト</div> 5 <script> 6 (function () { 7 var area = document.getElementById("area"); 8 area.addEventListener("paste", function (e) { 9 e.preventDefault(); 10 var text; 11 if (window.clipboardData) { 12 text = window.clipboardData.getData("text"); 13 } else { 14 text = e.clipboardData.getData("text/plain"); 15 } 16 17 if (document.selection) { 18 // 〜Internet Explorer 10 19 var range = document.selection.createRange(); 20 range.text = text; 21 } else { 22 // Internet Explorer 11/Chrome/Firefox 23 var selection = window.getSelection(); 24 var range = selection.getRangeAt(0); 25 var node = document.createTextNode(text); 26 range.insertNode(node); 27 range.setStartAfter(node); 28 range.setEndAfter(node); 29 selection.removeAllRanges(); 30 selection.addRange(range); 31 } 32 }, false); 33 }()); 34 </script> 35</body> 36</html>

投稿2016/03/06 06:27

chitoku

総合スコア1610

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

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

0

他の回答者さんのクリップボードAPIを使った方法が良いと思います。

古いブラウザもカバーする場合は、下記のような書き方でも同様のことができます。
ペーストイベント時に、少しタイミングをずらして取得することで貼り付け後のテキスト全てを取得して、textメソッドでプレーンな状態に置き換えます。

var pastePlainText = function() { this.init(); }; pastePlainText.prototype = { init: function() { this.$textbox = $('#area'); this.bindEvent(); }, bindEvent: function() { var _self = this; this.$textbox.on('paste', function() { _self.pasteText(); }); }, pasteText: function(){ var $textbox = this.$textbox, plainText; setTimeout(function(){ plainText = $textbox.text(); $textbox.text(plainText); }, 0); } }; new pastePlainText();

投稿2016/03/06 07:16

yamato_hikawa

総合スコア2092

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問