您可以實現類似這樣的事情,而不需要textarea
處理內容中的代碼時,每當其值發生更改時都可編輯div
,並刪除除段落和換行符之外的所有標籤。
的想法將是每一個div中內容的變化(聽input
事件)時間:
- 在內HTML替換所有
</p>
和<br>
非HTML標記(如:[p]
和[br]
)。
- 刪除所有的HTML標籤(你可以用
.text()
做)
- 裝回用於其等效令牌(和它們的開口!)
- 裹一切
<p>
和</p>
之間。
這裏一個簡單的演示:
$("#editable").on("input", function() {
$this = $(this);
// replace all br and closing p tags with special tokens
$this.html($this.html().replace(/\<\/p\>/g,"[p]").replace(/\<br\>/g,"[br]"));
// remove all the tags, and then replace the tokens for their original values
$this.html("<p>" + $this.text().replace(/\[p\]/g, "</p><p>").replace(/\[br\]/g,"<br>") + "</p>");
});
div#editable, div#demo {
border:1px solid gray;
padding:6px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div contenteditable="true" id="editable"></div>
<h3>Demo</h3>
<p>Copy this code and paste it on the editable div above:</p>
<div id="demo">
<p>This <b>is</b> <i>a</i> styled paragraph.</p>
<p> </p>
<p>The <span style="font-weight:bold">above paragraph</span> is empty.</p>
<p>And this is a new paragraph…<br>with a line break!</p>
</div>
你也可以看到它運行在這樣的jsfiddle:http://jsfiddle.net/v5rae96w/
我試着用MS Word和HTML,它這個解決方案工作正常。但它有一個問題:它只與p
和br
(與MS Word和其他文字處理器很好地配合)進行換行。如果用戶複製HTML如div
(或其他導致換行符的塊元素),則它不會很好地工作。如果您需要與所有塊元素斷開連接,則此解決方案可能需要進行一些更改。
爲了解決這個問題,你可以用p
(或div
或你想要的元素)替換所有的塊標記,通過指示它的正則表達式:
$this.html().replace(/(\<\/p\>|\<\/h1\>|\<\/h2\>|\<\/div\>)/gi,"[p]")
正如你所看到的在這裏:
$("#editable").on("input", function() {
$this = $(this);
// replace all closing block tags with special token
$this.html($this.html().replace(/(\<\/p\>|\<\/h1\>|\<\/h2\>|\<\/h3\>|\<\/h4\>|\<\/h5\>|\<\/h6\>|\<\/div\>)/gi,"[p]").replace(/\<br\>/gi,"[br]"));
// remove all the tags
$this.html("<p>" + $this.text().replace(/\[p\]/g,"</div><p>").replace(/\[br\]/g,"<br>") + "</p>");
});
div#editable, div#demo {
border:1px solid gray;
padding:6px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div contenteditable="true" id="editable"></div>
<div>
<h3>Demo</h3>
<p>Copy this code and paste it on the editable div above:</p>
<div id="demo">
<p>This <b>is</b> <i>a</i> styled paragraph.</p>
<p> </p>
<p>The <span style="font-weight:bold">above paragraph</span> is empty.</p>
<p>And this is a new paragraph…<br>with a line break!</p>
</div>
</div>
或者在這JSFiddle:http://jsfiddle.net/v5rae96w/1/
因爲客戶端將粘貼文本從微軟word,和其他編輯 – djt
有點困惑,爲什麼這是倒票。我解釋了我想要做什麼,我嘗試了什麼,爲什麼它不起作用。 – djt