Avatar billede moejensen Nybegynder
23. april 2004 - 17:35 Der 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?:

WordHTML = //den kode der ligger i "memory der er
Avatar billede pfp Nybegynder
23. april 2004 - 17:42 #1
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 &nbsp;
    html = html.replace(/&nbsp;/, " " );
    // 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 = "" ;
   
    return sData ;
}
Avatar billede pfp Nybegynder
23. april 2004 - 17:43 #2
Hovsa, var lidt for hurtig. Du kan godt undlade pastePlainText() metoden.
Avatar billede pfp Nybegynder
23. april 2004 - 17:44 #3
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() ;
}
Avatar billede moejensen Nybegynder
23. april 2004 - 17:53 #4
problemet er bare at jeg ikke bruger DOM (Active X) versionen.
Avatar billede moejensen Nybegynder
23. april 2004 - 17:54 #5
Jeg skulle mene at min metode også virker, men jeg skal bare lige finde ud af hvordan jeg får indholdet af clipboard ind i variablen WordHTML
Avatar billede roenving Novice
23. april 2004 - 18:01 #6
window.clipboardData.getData("Text")
Avatar billede moejensen Nybegynder
23. april 2004 - 18:03 #7
hvorfor skal der stå Text?
Avatar billede roenving Novice
23. april 2004 - 18:09 #8
Fordi det er data-typen, du skal hente fra clipboardet ...

-- der er 5 datatyper: Text, URL, File, HTML og Image, så måske skal din datatype være HTML, men det tror jeg ikke !-)
Avatar billede moejensen Nybegynder
23. april 2004 - 18:18 #9
det ser ud til at jeg får det rigtige med over ved at bruge text, men jeg får en i denne linje:

for (var i = 0; i < sHTML.all.length; i++) {

den siger err: all.length is null or not an object
Avatar billede moejensen Nybegynder
23. april 2004 - 18:33 #10
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å :-(
Avatar billede moejensen Nybegynder
23. april 2004 - 18:34 #11
der var jeg lidt for hurtig. window.clipboardData.getData("HTML") giver følgende fejl:

Unexpected call to method or property access
Avatar billede moejensen Nybegynder
23. april 2004 - 18:35 #12
men det er vidst i denne linje den fejler: var oSel = document.selection.createRange()
Avatar billede roenving Novice
23. april 2004 - 18:36 #13
@ 18:18:02 skyldes nok, at det er en tekststreng ...
Avatar billede moejensen Nybegynder
23. april 2004 - 18:40 #14
hvordan kan jeg så gøre?
Avatar billede moejensen Nybegynder
23. april 2004 - 20:46 #15
jeg gjorde således i stedet:

  function doSave()
  {
      var HTMLcode = stripCode(iView.document.body.innerHTML);
        window.location = 'KeKaCMS_editor.asp?htmlCode=' + HTMLcode;
  }

    function stripCode(sHTML) {
      sHTML = sHTML.replace("class=MsoNormal", "");
      sHTML = sHTML.replace("className", "");
      sHTML = sHTML.replace("style", "");
      sHTML = sHTML.replace(/<?xml:[^>]*\/>/gi, "");
      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;
    }

så kører funktionen bare når siden gemmes i stedet.
Avatar billede sjh Nybegynder
06. juni 2004 - 14:59 #16
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);
    }

    function CmdExec(value,option){
      Editor.focus();
      if (value == 'Paste'){
        Event_Beforepaste();
      }
      Editor.document.execCommand(value,false,option);
    }
    //-->
    </script>
  </head>
  <body>
    <a href="#" onclick="CmdExec('Paste');">Paste</a>
    <div id="Editor" name="Editor" contenteditable="true" onbeforepaste="Event_Beforepaste();"
    style="border: black 1px solid; width: 640; height: 480; overflow: auto; padding: 10px 10px"></div>
  </body>
</html>
Avatar billede sjh Nybegynder
07. juni 2004 - 13:01 #17
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);
      }
    }
Avatar billede ncp Nybegynder
13. juni 2004 - 18:07 #18
Nice kode sjh!, det var lige hvad jeg manglede til min editor ;)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I dag 10:21 Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging