Обрезать начальные/конечные пробелы из textarea с помощью jQuery?

следующий код является примером текста, помещенного в textarea из базы данных.

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

использование jQuery .trim каков фактический код jquery для удаления всех ведущих и конечных пробелов и отображения textarea, очень похожего на приведенное ниже?

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

Я работал над этим в течение нескольких часов без успеха пробовать различные сочетания с .trim

$('#inputPane')jQuery.trim(string);

6 ответов


вы можете попробовать что-то вроде этого:

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

что дает результат:

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

хотя это может быть не пуленепробиваемым, это должно оказаться намного быстрее/эффективнее, чем создание элементов из значения HTML textarea.


попробуйте это:

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

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

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

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

он превращает содержимое textarea в элементы, проходит через них и обрезает содержимое, а затем вставляет полученный HTML обратно в textarea.


EDIT: изменено для использования .val() вместо .text() как отметил @bobince


jQuery.trim() удаляет начальные и конечные пробелы из строки, в данном случае, до первого <p> и </p>. Вы хотите что-то более сложное, а именно удалить пробелы между определенными тегами. Это не обязательно легко, но может (возможно!) быть выполнено с регулярным выражением, например:

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

отказ от ответственности: это было просто быстро собрано и может не охватывать каждый случай.


получить значение, обрезать значение, установить значение:

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

или в одну строку:

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

вот как я бы это сделал (демо):

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

вам не нужно jQuery, чтобы обрезать ведущие / конечные пробелы из textarea. Вам нужно код в 1 строку

перед:

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

после:

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