Question

code suivant est un exemple de texte placé dans une zone de texte à partir d'une base de données.

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

à l'aide de .trim jQuery quel est le code jquery réelle pour supprimer tous les espaces avant et et ont l'affichage textarea très similaire au-dessous?

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

J'ai travaillé pendant des heures sans succès en essayant différentes combinaisons avec .trim

$('#inputPane')jQuery.trim(string);
Était-ce utile?

La solution

Vous pouvez essayer quelque chose comme ceci:

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'));
});​

Ce qui donne le résultat:

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

Bien que cela ne soit pas l'épreuve des balles, il devrait se révéler être beaucoup plus rapide / plus efficace que de créer des éléments de la valeur HTML de la zone de texte.

Autres conseils

Essayez ceci:

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

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

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

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

Il transforme le contenu du textarea en éléments, des promenades à travers eux et coupe le contenu, puis insère le dos HTML résultant dans le textarea.


EDIT: modifié pour utiliser .val() au lieu de .text() comme indiqué par @bobince

jQuery.trim() supprimera les espaces avant et de toute la chaîne - dans ce cas, avant la première <p> et après la dernière </p>. Vous voulez quelque chose de plus complexe, qui consiste à supprimer les espaces entre certaines balises. Ce n'est pas forcément facile, mais pourrait (peut-être!) Être accompli avec une expression régulière, par exemple:

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

AVERTISSEMENT:. C'était juste de mettre rapidement ensemble et peuvent ne pas couvrir tous les cas

Obtenir la valeur, l'assiette de la valeur, définissez la valeur:

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

Ou en une ligne:

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

Voici comment je le ferais ( démo ):

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

Vous n'avez pas besoin jQuery pour suppression des espaces de premier plan / arrière de textarea. Vous devez coder dans 1 ligne

Avant:

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

Après:

<textarea id="inputPane" cols="80" rows="40" class="pane"><p>some text here...</p></textarea>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top