Frage

Code folgt ein Beispiel von Text in ein Textfeld aus einer Datenbank gespeichert.

<textarea id="inputPane" cols="80" rows="40" class="pane">
<p>
    some text here...
</p>
  <p>
    more text here...
</p>
</textarea>

jQuery .trim mit, was ist der eigentliche Code jquery alle führenden und nachfolgenden Leerzeichen zu entfernen und haben das Textfeld Display sehr ähnlich unten?

<textarea id="inputPane" cols="80" rows="40" class="pane">
    <p>some text here...</p>
    <p>more text here...</p>
</textarea>

Ich habe stundenlang daran gearbeitet ohne Erfolg unterschiedliche Kombinationen mit .trim

Versuch
$('#inputPane')jQuery.trim(string);
War es hilfreich?

Lösung

Sie könnte so etwas wie diese versuchen:

jQuery(function(​$) {
    var pane = $('#inputPane');
    pane.val($.trim(pane.val()).replace(/\s*[\r\n]+\s*/g, '\n')
                               .replace(/(<[^\/][^>]*>)\s*/g, '$1')
                               .replace(/\s*(<\/[^>]+>)/g, '$1'));
});​

, die das Ergebnis ergibt:

<p>some text here...</p>
<p>more text here...</p>

Obwohl dies nicht kugelsicher sein kann, sollte es sich als viel schneller sein / effizienter als Elemente aus dem HTML-Wert des Textbereiches zu schaffen.

Andere Tipps

Versuchen Sie diese:

var $input = $('#inputPane');

var $container = $('<div>').html( $input.val() );

$('*', $container).text( function(i,txt) {
    return $.trim( txt );
});

$input.val( $container.html() );

Es stellt sich den Inhalt der textarea in Elemente, Spaziergänge durch sie und trimmt den Inhalt, dann fügt das resultierende HTML zurück in die textarea.


EDIT: geändert zum Einsatz .val() statt .text() wie bereits von @bobince

jQuery.trim() wird entfernen führende und nachfolgende Leerzeichen aus dem gesamten String - in diesem Fall vor dem ersten <p> und nach dem letzten </p>. Sie wollen etwas komplexer, die zwischen bestimmten Tags zu entfernen Leerzeichen ist. Dies ist nicht unbedingt leicht, kann aber (vielleicht!) Mit einem regulären Ausdruck erreicht werden, zum Beispiel:

// assuming val is the textarea contents:
val = val.replace(/>\s*</, '><').replace(/\s+$/, '');

HAFTUNGSAUSSCHLUSS:. zusammen Dies war nur schnell gestellt und kann jeden Fall nicht abdecken

, um den Wert erhalten, schneiden Sie den Wert, den Wert:

var value = $('#inputPane').val();
value = $.trim(value);
$('#inputPane').val(value);

oder in einer Zeile:

$('#inputPane').val($.trim($('#inputPane').val()));

Dies ist, wie ich es tun würde ( Demo ):

$('.pane').val(function(i,v){
    return v.replace(/\s+/g,' ').replace(/>(\s)</g,'>\n<');
});

Sie brauchen jQuery nicht führende / nachfolgende Leerzeichen von Textbereich zu trimmen. Sie müssen es in 1 Zeile Code

Bevor:

<textarea id="inputPane" cols="80" rows="40" class="pane">
    <p>some text here...</p>
    <p>more text here...</p>
</textarea>

Nach:

<textarea id="inputPane" cols="80" rows="40" class="pane"><p>some text here...</p></textarea>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top