2016-05-23 12 views
4

Ich versuche, den Text, den ich von Kendo-Editor wie folgt erhalten trimmen.Trim & Nbsp Werte in Javascript

var html = "  T  "; // This sample text I get from Kendo editor 
      console.log("Actual :" + html + ":"); 
      var text = ""; 
      try { 
       // html decode 
       var editorData = $('<div/>').html(html).text(); 
       text = editorData.trim();      
       console.log("After trim :" + text + ":"); 
      } 
      catch (e) { 
       console.log("exception"); 
       text = html; 
      } 

Dieser Code ist in einer separaten js-Datei (generiert aus Typoskript). Wenn die Seite geladen wird, funktioniert die Beschneidung nicht. Aber wenn ich den gleichen Code in Developer Tools-Konsole Fenster läuft, funktioniert es. Warum funktioniert es nicht?

Typoskript Code Hinzufügen

const html: string = $(selector).data("kendoEditor").value(); 
     console.log("Actual :" + html + ":"); 
     let text: string = ""; 
     try { 
      // html decode 
      var editorData = $('<div/>').html(html).text(); 
      text = editorData.trim(); 
      console.log("After trim :" + text + ":"); 
     } 
     catch (e) { 
      console.log("exception"); 
      text = html; 
     } 
+0

* Wenn die Seite der Beschnitt lädt nicht * funktioniert - wir als weitere Informationen benötigen werden diese Frage – Jamiec

+1

''   ist nicht wirklich weiß Raum zu beantworten. Es wird vom Browser als Whitespace gerendert, aber was Javascript angeht, ist es das nicht. Es ist eine Schnur. – Liam

+0

Auf der Seite befindet sich ein Kendo-Editor. Benutzer geben etwas Text ein und klicken auf Speichern. Dann wird dieses Javascript aufgerufen. Im Grunde ist dieser Code Zweck, die nachfolgenden Leerzeichen zu trimmen und zu speichern. – PSR

Antwort

4

&nbsp; wird ein non-break-space character, \u00a0. JavaScript String#trim ist supposed to remove those, aber in der Vergangenheit Browser-Implementierungen waren in dieser Hinsicht ein bisschen fehlerhaft. Ich dachte, diese Fragen hatte in modernere gelöst worden, aber ...

Wenn Sie in Browsern laufen, dass es nicht korrekt implementieren, können Sie mit einem regulären Ausdruck das umgehen:

text = editorData.replace(/(?:^[\s\u00a0]+)|(?:[\s\u00a0]+$)/g, ''); 

Das besagt, alle Leerzeichen oder Non-Break-Space-Zeichen am Anfang und am Ende mit nichts zu ersetzen.

Aber Ihr Kommentar gesehen zu haben:

Als ich dieses Stück Code separat laufen, ist es gut für mich funktioniert. Aber in der Anwendung ist es fehlgeschlagen.

... das kann es nicht sein.

Alternativ, könnten Sie die &nbsp; Markup vor dem Konvertieren in Text entfernen:

html = html.replace(/(?:^(?:&nbsp;)+)|(?:(?:&nbsp;)+$)/g, ''); 
var editorData = $('<div/>').html(html).text(); 
text = editorData.trim();  

, dass alle &nbsp; s am Anfang oder Ende Umwandlung der Markup in Text vor entfernt.

+0

Ihre Lösung editorData.replace funktioniert für mich. Vielen Dank. – PSR

+0

@Sree: Großartig! Es tut mir leid, dass die Browser das immer noch falsch verstehen, aber ich bin froh, dass das geholfen hat. :-) –

+2

Vielleicht würden die Downvoter teilen, warum sie das für "nicht nützlich" halten? –

0

Um einfachste Weg, nicht-Bruch aus einem String Leerzeichen zu trimmen ist

html.replace(/&nbsp;/g,' ').trim() 
+0

Dadurch werden Leerzeichen in der Mitte der Zeichenfolge entfernt – mikewasmike

1

Wenn Sie jQuery verwenden Sie jQuery.trim()

Funktion entfernt alle Zeilenumbrüche, Leerzeichen verwenden (einschließlich nicht geschützter Leerzeichen) und Registerkarten am Anfang und Ende der angegebenen Zeichenfolge. source