以下代码是将文本从数据库放入文本区域的示例。

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

使用 jQuery 的 .trim 删除所有前导和尾随空格并使文本区域显示与下面非常相似的实际 jquery 代码是什么?

<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);
有帮助吗?

解决方案

你可以尝试这样的事情:

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

结果如下:

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

尽管这可能不是万无一失的,但它应该比从文本区域的 HTML 值创建元素更快/更高效。

其他提示

试试这个:

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

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

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

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

它变成了 textarea 进入元素,浏览它们并修剪内容,然后将结果的HTML插入 textarea.


编辑: 修改为使用 .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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top