2014-06-25 15 views
6

Sto provando a creare un div contenteditable HTML5, che accetta solo un testo normale. Sto utilizzando jQuery html e di seguito:Il div HTML contenteditable accetta solo testo in chiaro

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

Ma non funziona per tutti i browser. getData non supportato nel browser Internet Explorer. Ho provato molte soluzioni menzionate qui su StackOverflow, ma nessuno ha funzionato per me.

Ho anche provato

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

Ma in questo caso document.execCommand("insertText", false, text); non funziona per IE.

C'è un modo per rendere possibile accettare i dati dopo aver filtrato i tag HTML, in modo che chiunque immetta i dati in div modificabili per tipo, incolla, rilascia o in qualsiasi altro modo. Dovrebbe essere visualizzato come testo.

+0

guardare con questo concetto: '$ ('

Ciao, I \' m HTML

') .text(); '. Questo dovrebbe darti "Ciao, sono HTML". –

+0

Immagino che sia la cosa diversa di cui stai parlando. Nel nostro caso dobbiamo incollare i contenuti. Convertirlo in testo semplice e visualizzarlo in div. – Tarun

+1

Il mio commento copre la parte "convertirlo in testo normale". Non ho alcuna esperienza con l'API JavaScript per quello che stai cercando di fare, ma mentre ho letto la domanda, ho difficoltà a capire cosa stai avendo problemi con. Ad esempio, "_now_ working for IE" dovrebbe leggere come "non funziona per IE?" –

risposta

5

Non essendo un grande fan di jQuery, la mia soluzione non ne farà alcun uso. In ogni caso qui va (dovrebbe comunque funzionare, come pura 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); 
 
});

Problemi correlati