【问题标题】:closing a tag with javascript用 javascript 关闭标签
【发布时间】:2013-04-01 07:24:03
【问题描述】:

我正在尝试使用 javascript 关闭标签,但是当它写入文档时,正斜杠总是丢失。我试过在它前面加上一个反斜杠(“\/”),但它似乎有帮助。我一直在页面源上看到<pre>。代码如下:

var temp_index = 0,
    line_count = 0;
while (temp_index < text.length) {
    if ((text.charAt(temp_index) == "\n") && (line != line_count)) {
        if (line_count < line) line_count++;
        if (line_count == line) {
            text = text.substring(0, temp_index) + "<pre id='line'>" + text.substring(temp_index);
            temp_index++;
            while ((text.charAt(temp_index) != "\n") && (temp_index < text.length)) temp_index++;
            text = text.substring(0, temp_index - 1) + "<\pre>" + text.substring(temp_index);
        }
    }
    temp_index++;
}
return text;

我希望得到:

Heres's the last line
<pre id='line'>Here's the current line</pre>
Here's the next line
Here's the final line

但我得到了:

Here's the last line
<pre id='line'>Here's the current line
Here's the next line
Here's the final line</pre>

我通过将行末尾的 \n 替换为标记进行了快速修复。 即使它解决了这个问题,它也会导致键盘输入出现错误。这是更新后的代码。

if (line_count == line) {
    text = text.substring(0, temp_index) + "<pre id=\"line\">" + text.substring(temp_index);
    temp_index++;
    while ((text.charAt(temp_index) != "\n") && (temp_index < text.length)) temp_index++;
    text = text.substring(0, temp_index - 1) + "</pre>" + text.substring(temp_index);
    break;
}

【问题讨论】:

  • 是的,我刚刚做了,我还在看
  • 您不需要转义正斜杠,因此“//”实际上等于“//”。反斜杠是另一回事,所以如果字符串中有“\\”,它将导致“\”。
  • 不确定您的示例是否关闭,但您需要初始化 temp_index = 0; 并且您的 break 不在您的 while 循环内(您没有大括号)跨度>
  • 你的预期输出是什么?
  • temp_index 已初始化,我删除了中断。我更新了问题以显示我的预期输出

标签: javascript html text-formatting


【解决方案1】:

此代码在语法上是正确的 - 初始化 temp_indextext 并在循环外省略 break

temp_index = 0;
text = "this is \n a test \n of some info";

text =  text.substring( 0, temp_index )
     + "<pre id=\"line\">"
     + text.substring( temp_index );

temp_index++;

while( ( text.charAt( temp_index ) != "\n" ) && ( temp_index < text.length ) ) temp_index++;

text = text.substring( 0, temp_index - 1 )
     + "</pre>"
     + text.substring( temp_index - 1 );

alert(text);

结果

<pre id="line">this is</pre> 
 a test 
 of some info

你也可以使用replace重写当前行,得到和上面一样的结果:

text = "this is \n a test \n of some info";
text = text.replace(/(.+?)\n/, "<pre id=\"line\">$1</pre>\n"); 

如果您知道当前行并希望在其前面加上&lt;pre id=\"line\"&gt; 并在其后面加上&lt;/pre,我会使用split()join()

// update line 2
line = 2;

// sample text
text = "this is\n"+
       "a test\n"+
       "of some info";

// split to an array on newlines
vals = text.split("\n");

// replace the second line, which has an index of 1 (or line-1)
vals[line-1] = "<pre id=\"line\">" + vals[line-1] + "</pre>";

// join back to an array using newlines
text = vals.join("\n");

结果:

this is
<pre id="line">a test</pre>
of some info

【讨论】:

  • 我更新了代码以显示父 while 循环,并且我已经初始化了 temp_index 和 line_count
  • text 变量是否包含当前行?
  • 它包含许多行,包括当前行。并且要突出显示的行由'line'指定
  • 在这种情况下,我可能只是在\n 上使用split(),替换当前行的数组值,然后再替换join()
  • 我刚试过,但它会在每行的末尾添加逗号并删除所有\n
猜你喜欢
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
相关资源
最近更新 更多