html5中contenteditable屬性如果過濾標簽,過濾富文本樣式


​在div中使用contenteditable=”true”可以達到模擬輸入框的效果,但是當我們復制其他網頁內容進去的時候,會發現連帶的樣式也一起復制進去了。很明顯我們不需要復制富文本樣式,那么如何過濾這些標簽呢?

 

查閱資料,發現如果只保證支持HTML5的webkit內核瀏覽器,目前有一些方法如下:

方法一:

1 <div contenteditable="plaintext-only" id="content"></div>

熊貓辦公 https://www.wode007.com/sites/73654.html

方法二:基於css

1 user-modify: read-write-plaintext-only;   
2 -webkit-user-modify: read-write-plaintext-only

 

 

如果在非 webkit 的內核,我們需要考慮使用js來實現,首先想到的是:

1 var d= document.getElementById( "content" );
2 document.addEventListener( "keydown", function() {
3     d.innerHTML = d.innerHTML.replace( /<[^>]*>/g, "" );
4 });

 

發現效果同上面大體一樣,這樣雖然能過濾樣式,但是有很多問題,比如光標始終在首位、輸入框不能插入表情、換行符失效等問題。 上網查了一下別人是怎么做的發現可以通過修改復制事件來過濾樣式:

 1 function pasteFilter(e){
 2     e.preventDefault();
 3     var text = null;
 4     //得到剪貼板中的文本
 5     if(window.clipboardData && clipboardData.setData) {
 6         // IE
 7         text = window.clipboardData.getData('text');
 8     }else{
 9         try{
10             text = (e.originalEvent || e).clipboardData.getData('text/plain');
11         }catch(e){
12             return;
13         }
14     };
15     if (document.body.createTextRange) {    
16         if (document.selection) {
17             textRange = document.selection.createRange();
18         } else if (window.getSelection) {
19             sel = window.getSelection();
20             var range = sel.getRangeAt(0);
21             // 創建臨時元素,使得TextRange可以移動到正確的位置
22             var tempEl = document.createElement("span");
23             tempEl.innerHTML = "&#FEFF;";
24             range.deleteContents();
25             range.insertNode(tempEl);
26             textRange = document.body.createTextRange();
27             textRange.moveToElementText(tempEl);
28             tempEl.parentNode.removeChild(tempEl);
29         };
30         textRange.text = text;
31         textRange.collapse(false);
32         textRange.select();
33     } else {
34         // Chrome之類瀏覽器
35         document.execCommand("insertText", false, text);
36     };
37 };
38 var d= document.getElementById( "content" );
39 d.addEventListener("keydown",function(e){
40     if (e.ctrlKey || e.metaKey) {
41         if(e.keyCode==117){
42             pasteFilter(e);
43         }
44     }
45 },false);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM