Following code is an example of text placed into a textarea from a database.
jQuery.trim()
will remove leading and trailing whitespace from the entire string -- in this case, before the first <p>
and after the last </p>
. You want something more complex, which is to remove whitespace between certain tags. This is not necessarily easy, but could (perhaps!) be accomplished with a regular expression, for example:
// assuming val is the textarea contents:
val = val.replace(/>\s*</, '><').replace(/\s+$/, '');
DISCLAIMER: This was just quickly put together and may not cover every case.
Try this:
var $input = $('#inputPane');
var $container = $('<div>').html( $input.val() );
$('*', $container).text( function(i,txt) {
return $.trim( txt );
});
$input.val( $container.html() );
It turns the content of the textarea
into elements, walks through them and trims the content, then inserts the resulting HTML back into the textarea
.
EDIT: Modified to use .val()
instead of .text()
as noted by @bobince
This is how I would do it (demo):
$('.pane').val(function(i,v){
return v.replace(/\s+/g,' ').replace(/>(\s)</g,'>\n<');
});
Get the value, trim the value, set the value:
var value = $('#inputPane').val();
value = $.trim(value);
$('#inputPane').val(value);
Or in one line:
$('#inputPane').val($.trim($('#inputPane').val()));
You could try something like this:
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'));
});
Which gives the result:
<p>some text here...</p>
<p>more text here...</p>
Though this may not be bulletproof, it should prove to be much faster/more efficient than creating elements from the HTML value of the textarea.
You don't need jQuery to Trim leading/trailing whitespace from textarea. You need to code it in 1 line
Before:
<textarea id="inputPane" cols="80" rows="40" class="pane">
<p>some text here...</p>
<p>more text here...</p>
</textarea>
After:
<textarea id="inputPane" cols="80" rows="40" class="pane"><p>some text here...</p></textarea>