2014-06-25 43 views
6

我正在尝试创建一个HTML5 contenteditable div,它只接受纯文本。我使用HTML和jQuery如下:HTML5 contenteditable div只接受纯文本

HTML

<div contenteditable="true"></div> 

jQuery的

(function() { 
    $('[contenteditable]').on('paste', function (e) { 
    e.preventDefault(); 
    var text = null; 
    text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('Paste Your Text Here'); 
    document.execCommand("insertText", false, text); 
    }); 
}); 

但它不工作的所有浏览器。在Internet Explorer浏览器中不支持getData。我在这里提到了很多解决方案,但没有为我工作。

我也试过

(function() { 
    $('[contenteditable]').on('paste', function (e) { 
    e.preventDefault(); 
    var text = null; 

    if (window.clipboardData && clipboardData.setData) { 
     text = window.clipboardData.getData('text'); 
    } else { 
     text = (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('Paste Your Text Here'); 
    } 
    document.execCommand("insertText", false, text); 
    }); 
}); 

但在这种情况下,document.execCommand("insertText", false, text);不工作的IE浏览器。

有什么办法可以在过滤HTML标签后接受数据,以便任何人通过类型,粘贴,放置或其他方式将数据输入到可编辑div中。它应该显示为文本。

+0

看看使用这一概念: '$('

嗨,我\ n HTML

“)的.text();'。这应该给你'嗨,我是HTML'。 –

+0

我想这是你谈论的不同的事情。在我们的情况下,我们必须获取粘贴的内容。将其转换为纯文本并显示在div中。 – Tarun

+1

我的评论涵盖了“将其转换为纯文本”部分。我没有任何使用JavaScript API的经验,因为您正在尝试做什么,但是当我阅读这个问题时,我很难理解您遇到的问题。例如,“为IE浏览器工作”应该被理解为“不适用于IE?” –

回答

5

不是jQuery的忠实粉丝,我的解决方案不会使用它。反正这里有云(应该反正工作,因为纯JavaScript):

function convertToPlaintext() { 
 
    var textContent = this.textContent; 
 
    this.innerHTML = ""; 
 
    this.textContent = textContent; 
 
} 
 

 
var contentEditableNodes = document.querySelectorAll('[contenteditable]'); 
 

 
[].forEach.call(contentEditableNodes, function(div) { 
 
    div.addEventListener("input", convertToPlaintext, false); 
 
});