2014-06-25 24 views
6

Próbuję utworzyć contenteditable div, który akceptuje tylko zwykły tekst: HTML5. Używam html i jQuery poniżej:Element HTML5 contenteditable div akceptuje tylko zwykły tekst.

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); 
    }); 
}); 

Ale to nie działa na wszystkich przeglądarkach. getData nie obsługuje przeglądarki Internet Explorer. Próbowałem wiele rozwiązań tutaj wspomnieć na stackoverflow, Ale żaden nie pracował dla mnie.

Próbowałem też

(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); 
    }); 
}); 

Ale w tym przypadku document.execCommand("insertText", false, text); nie działa na IE.

Czy istnieje sposób, aby umożliwić akceptowanie danych po tagach HTML filtru, Tak aby każdy wprowadzał dane do edytowalnego elementu div według typu, wklejenia, upuszczenia lub w jakikolwiek inny sposób. Powinien wyświetlać go jako tekst.

+0

przyjrzeć przy użyciu tego pojęcia: '$ ('

Hi, I \' m HTML

") .text();'. To powinno dać ci "Cześć, jestem HTML". –

+0

Chyba jest to o czym mówisz. W naszym przypadku musimy wkleić treść. Przekonwertuj go na zwykły tekst, a następnie wyświetl go w div. – Tarun

+1

Mój komentarz obejmuje część "zamień na zwykły tekst". Nie mam żadnego doświadczenia w pracy z interfejsem API JavaScript w tym, co próbujesz zrobić, ale kiedy czytam to pytanie, mam problem ze zrozumieniem, z czym masz problem. Na przykład, czy "_now_ working for IE" ma być czytane jako "_nie_ pracujące dla IE?" –

Odpowiedz

5

Będąc niezbyt wielkim fanem jQuery, moje rozwiązanie nie wykorzysta tego. Zresztą tu idzie (powinien w każdym razie działa, jako czystego 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); 
 
});

Powiązane problemy