23. april 2004 - 17:35Der er
17 kommentarer og 1 løsning
rens word kode ved tryk på knap
Jeg er ved at lave en word cleanup metode til min lille editor. Det meste er fundet forskellige steder her på eksperten og sat sammen.
målet er med metoden at brugeren markere sin tekst i word, og efterfølgende går over i editoren og trykker på en speciel knap der renser koden inden den sættes ind.
metoden er vist her:
function doWordPaste() { WordHTML = //den kode der ligger i "memory der er kopieret fra word" var oSel = document.selection.createRange() if(oSel.parentElement) { iView.focus() iView.document.execCommand("SelectAll") iView.document.execCommand("Paste") oSel.pasteHTML(stripKode(WordHTML)) }
function stripKode(sHTML) { for (var i = 0; i < sHTML.all.length; i++) { sHTML.all[i].removeAttribute("className","",0); sHTML.all[i].removeAttribute("style","",0); } var sHTML = WordHTML sHTML = sHTML.replace(/<?xml:[^>]*\/>/gi, ""); sHTML = sHTML.replace(/<o:p>/gi, "") sHTML = sHTML.replace(/<\/o:p>/gi, "") sHTML = sHTML.replace(/<I[^>]*\>/gi, "<I>"); sHTML = sHTML.replace(/<B[^>]*\>/gi, "<B>"); return sHTML; }
Jeg ved ikke om det virker, eller om det er den pæneste måde at gøre det på, men mint problem lige nu er hvad jeg skal skrive ui følgende linje for at få det der er kopieret fra word ind i variablen WordHTML?:
fckeditor gør sådan her...og det virker glimrende:
function pastePlainText() { var sText = HTMLEncode( clipboardData.getData("Text") ) ; sText = sText.replace(/\n/g,'<BR>') ; insertHtml(sText) ; }
function pasteFromWord() { if (BrowserInfo.IsIE55OrMore) cleanAndPaste( GetClipboardHTML() ) ; else if ( confirm( lang["NotCompatiblePaste"] ) ) decCommand(DECMD_PASTE) ; }
function cleanAndPaste( html ) { // Remove all SPAN tags html = html.replace(/<\/?SPAN[^>]*>/gi, "" ); // Remove Class attributes html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ; // Remove Style attributes html = html.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3") ; // Remove Lang attributes html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ; // Remove XML elements and declarations html = html.replace(/<\\?\?xml[^>]*>/gi, "") ; // Remove Tags with XML namespace declarations: <o:p></o:p> html = html.replace(/<\/?\w+:[^>]*>/gi, "") ; // Replace the html = html.replace(/ /, " " ); // Transform <P> to <DIV> var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)","gi") ; // Different because of a IE 5.0 error html = html.replace( re, "<div$2</div>" ) ;
insertHtml( html ) ; }
function GetClipboardHTML() { var oDiv = document.getElementById("divTemp") oDiv.innerHTML = "" ;
var oTextRange = document.body.createTextRange() ; oTextRange.moveToElementText(oDiv) ; oTextRange.execCommand("Paste") ;
var sData = oDiv.innerHTML ; oDiv.innerHTML = "" ;
Du skal lige have denne funktion ind også: function insertHtml(html) { if (objContent.DOM.selection.type.toLowerCase() != "none") objContent.DOM.selection.clear() ; objContent.DOM.selection.createRange().pasteHTML(html) ; SetFocus() ; }
Nej, nu testede jeg lige og det er ikke helt godt. window.clipboardData.getData("Text") overføre kun tekst, men det gør window.clipboardData.getData("HTML") også :-(
moejensen > Du kan bare gøre sådan, så er det kun tekst..
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Paste Tekst</title> <script type="text/javascript"> <!-- function Event_Beforepaste(){ var strPaste = window.clipboardData.getData("Text", strPaste); window.clipboardData.setData("Text", strPaste); }
den skal nok være sådan.. eller kommer der fejl hvis clipboard er tom..
function Event_Beforepaste(){ var strPaste = window.clipboardData.getData("Text", strPaste); if (strPaste) { window.clipboardData.setData("Text", strPaste); } }
Nice kode sjh!, det var lige hvad jeg manglede til min editor ;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.