如何用四个空格jQuery替换标签

时间:2015-01-30 01:24:58

标签: javascript jquery replace tabs spaces

在您按照已经提出的标记之前,请继续阅读!

所以我一直在网上搜索(包括StackOverflow),以便用四个空格替换元素中的所有选项卡(更具体地说是一个xmp元素)。这样做的目的是显示代码。

如果您访问http://synergytechhosting.com/codeshower.html,您会看到我的代码。第一个"完全测试代码"它前面有一个标签。第二个有四个空格。这四个空格看起来比标签更合理。我需要它将所有标签分成四个空格,这样如果有人决定使用标签进行空间定位,它会为它们修复它而不是让用户自己完成。

另一个问题是XMP将代码的第一行计为空白并将所有内容向下移动。这只能通过这样做来解决:

<xmp><div>

而不是正常:

<xmp>
<div>

基本上我需要这个脚本来替换每个4个空格的标签并删除第一个&#34;输入&#34;在整个事情中。

我已经使用它来修复标签但它似乎无法正常工作。

$('xmp').html(function() {
    return this.innerHTML.replace(/\t/g, ' ');
});

我真的需要这个工作,并让我自己疯了试图解决这个问题。我很确定这是一个非常愚蠢的错误。我希望这是因为我是一个jQuery noob。有没有比使用XMP更好的方法?我对任何事情都持开放态度,任何帮助都是非常感激的。

最诚挚的问候, 以马内利

4 个答案:

答案 0 :(得分:2)

你的脚本几乎是正确的,只需用4个空格而不是1个替换

并删除第一个换行符,只需从字符串中删除第一个字符

$('xmp').html(function() {
    return this.innerHTML.substring(1).replace(/\t/g, '    ');
});

答案 1 :(得分:0)

要修剪任何前导和尾随空格,请使用jQuery.trim。要将代码从选项卡重新缩进到空格,而不影响显示在代码行内的选项卡,请匹配字符串的开头(^),并使用多行标记(m

$('xmp').html(function(){
    return $.trim($(this).html()).replace(/^\t/gm, '    ');
});

工作示例:

&#13;
&#13;
$('xmp').html(function(){
    return $.trim($(this).html()).replace(/^\t/gm, '    ');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<xmp>
<div>
	<p>totally test code</p>
    <p>totally test code</p>
    <p>totally tab	code</p>
</div>
</xmp>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

以下代码段应该可以运作得很好:

$('xmp').html(function () {
    return $.trim($(this).html()).replace(/^\t/gm, '    ');
});

它将用四个空格替换行开头的任何制表符。因为正则表达式使用^锚定,所以它不应该影响行中间的任何内容。

但是这里有一些你可能没有考虑过的事情:如果代码的原始作者在屏幕上有8个空格的标签,但是用2或4个空格的多个缩进代码与这些标签相混合怎么办?如果作者想要将一个块缩进到第12列,他们就会做[Tab] + [4 spaces]之类的事情。这听起来很疯狂,但我看到一些项目(Gallery2浮现在脑海中),它们使用制表符和空格的组合来精确控制缩进。请注意,\t字符的字面意思并不是“8(或4)空格”,它表示“直到下一列是8(或4)的倍数。”因此,[Tab] + [Tab]通常会在屏幕上呈现与[Tab] + [2 spaces] + [Tab]相同的内容,但此正则表达式会以非常不同的方式对其进行转换。

有一个名为expand的* nix附带的GNU实用程序,它是将标签转换为空格的瑞士军刀。源代码是C语言,但它很简短,并且对于通用的制表符到空间解决方案可能有多少边缘情况有一些有趣的见解。 http://git.savannah.gnu.org/cgit/coreutils.git/plain/src/expand.c

答案 3 :(得分:0)

如果您要在网页中显示空格,则还需要用nbsp替换空格。首先用所需的空格数替换制表符,然后用nbsp替换空格

//replace tabs with spaces
msg=msg.replace(/\t/g, '     ');
//replace spaces with &nbsp;
msg=msg.replace(/ /g, '\u00a0');