2017-12-19 3 views
1

Ich habe ein Werkzeug, das die leeren Zeilen aus einer Bestätigung (Text) entfernt, aber aus irgendeinem Grund gibt es eine obere Zeile, die nicht als leere Zeile gelesen wird und nicht gelöscht wird.

Momentan erlaubt mein Werkzeug einer Person, Text in den Textbereich einzufügen, wenn dann auf "Leerzeichen entfernen & kopieren" geklickt wird, werden leere Zeilen entfernt und Text in die Zwischenablage kopiert.

Ich möchte die gleiche Funktion behalten, aber lösche irgendwie die erste Zeile, wenn Text in das Textfeld eingegeben wird oder wenn auf "Leerzeichen entfernen & kopieren" geklickt wird.Entfernen Sie die erste Zeile aus dem Textarea

<script> 
function copyToClipboard(element) { 
    var text = $(element).clone().find('br').prepend('\r\n').end().text() 
    element = $('<textarea>').appendTo('body').val(text).select() 
    document.execCommand('copy') 
    element.remove() 
    } 
    </script> 

<textarea name="mas" rows="100" rows="50" contenteditable="true" id="p20" class="content" onchange="this.value=this.value.replace(/[\n\r](?!\w)/gi,'');" style="height: 500px; width:800px;" type="text" data-bind="value: myValue, hasFocus: cleared"></textarea> 



<!----------- BUTTONS ------------> 
<div class="fixed"> 
<button onclick="copyToClipboard('#p20')" class="templateBtn">Remove Spaces & Copy</button> 
<input type="button" data-bind="click: clearValue" value="clear" class="templateBtn" /> 
<script type="text/javascript"> 
    var viewModel = { 
    myValue: ko.observable(''), 
    cleared: ko.observable(false), 
    clearValue: function() {  
    this.myValue(''); 
    this.cleared(true); 
    } 
    }; 

    ko.applyBindings(viewModel); 
    </script> 

    <!----------- END.BUTTONS ------------> 

<div class="mas" id="hide" ></div> 

<pre contenteditable="true" id="p20" class="templateText"> 

</div></div> 
+0

Textbereiche haben ein spezielles Attribut Zeilen genannt (und Spalten). Das könnte etwas zu sehen sein ...? –

Antwort

0

Hier ist eine schnelle Lösung Sie verwenden können, führen Sie eine trim() auf dem zu ersetzenden Text:

<textarea name="mas" rows="100" rows="50" contenteditable="true" 
id="p20" class="content" 
onchange="this.value=(this.value.replace(/[\n\r](?!\w)/gi,'')).trim();" 
style="height: 500px; width:800px;" type="text" 
data-bind="value: myValue, hasFocus: cleared"></textarea> 
+0

Das sind super !!! beide arbeiten! Ich danke dir sehr! – user3806255

1

[\n\r](?!\w) die reguläre Ausdruck stimmt mit einer oder CR LF nicht durch eine alphanumerische oder Unterstrich, gefolgt. So kann das erste von zwei Zeilenabschlusszeichen in einer Zeile übereinstimmen, wenn Leerzeilen durch die Nullzeichenfolge ersetzt werden. '' Es entspricht keinem Zeilenabschluss gefolgt von einem Buchstaben. Daher wird ein Zeilenabschluß am Anfang des Textes, gefolgt von einem Wortzeichen, an Ort und Stelle belassen.

Leere Zeilen, die als "Zeilenbeginn, gefolgt von null oder mehr Leerzeichen ohne Abschlusszeichen, gefolgt von Zeilenende, gefolgt von null oder mehr Zeilenabschlüssen" definiert sind, können durch einen mehrzeiligen regulären Ausdruck wie :

/^[ \f\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]*$[\n\r]*/gm; 

wo der erste Zeichensatz, der verwendet wird zum Abgleichen Leerzeichen (\s) nach dem Zeilenvorschub und Wagenrücklaufzeichen zu entfernen, und die Komponente $[\n\r]* einstimmt beiden Leitungsabbrechern und Ende der Eingabe. (Herausgegeben: eine Hinterleerzeile ohne Leitungsabschluss am Ende abgestimmt ist)

es unten Versuchen durch Linien Eingabe und außerhalb des TextArea- Element Klicken auf eine Änderungsereignis auslösen:

function removeBlankLines(textArea) { 
 
    var blankLine = /^[ \f\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]*$[\n\r]*/gm; 
 
    textArea.value=textArea.value.replace(blankLine,''); 
 
}
<textarea onchange="removeBlankLines(this)" cols="20" rows="8"></textarea>

Diese trimmen nicht oder Leerzeichen entfernen innerhalb nicht-Leerzeilen. Wenn Sie immer noch Schwierigkeiten haben, das zu erreichen, was Sie tun möchten, aktualisieren Sie die Frage bitte mit den Textdaten, die für das Problem verwendet wurden, und beschreiben Sie detailliert, was Sie erwartet haben und was Sie erhalten haben. Bitte entfernen Sie den Knockout-Code, wenn dieser nicht mit der Frage in Zusammenhang steht (scheint es nicht zu sein).

Verwandte Themen