如何在与段落一起使用的javascript中添加换行符

时间:2015-04-14 18:59:32

标签: javascript html

我写了这个函数来格式化某个字符串:

var desc = document.getElementById('desc');
            var parContent = desc.textContent.trim();
            var tempPar = "";
            var j = 0;
            var k = 0;
            var built_val = "";

            for (var i = 0; i < parContent.length ; i++)
            {
                if (j == 19 || i == parContent.length-1)
                {
                    tempPar = parContent.substring(k, i);
                    tempPar = tempPar.concat("- \n");
                    built_val = built_val.concat(tempPar);

                    tempPar = "";
                    //Restart j
                    j = 0;
                    //update k
                    k = i;
                    continue;
                }
                j++;
            }
            desc.textContent = built_val;

Desc是一个动态段落,首先通常为空,然后填充(其数据在页面加载后组成),j是一行中所需的字符数。

虽然现在我有另一个问题,但是\ n不起作用;我也试过br
。如何在javascript字符串中插入新的换行符,例如“built_val”?请注意在一切之后如何将其分配给Html

4 个答案:

答案 0 :(得分:3)

textContent属性设置元素的文字文本(通过添加文本节点),并且不会将您的标记解析为html。相反,你应该这样做:

desc.innerHTML = built_val;

答案 1 :(得分:2)

是的,你正在使用.textContent这就是为什么<br>不会被解析的原因(这是一件好事!)

您想使用document.createTextNode()document.createElement('br')

var desc = document.getElementById('desc');
var parContent = desc.textContent.trim();
var tempPar = "";
var j = 0;
var k = 0;
var built_val = "";

for (var i = 0; i < parContent.length; i++) {
    if (j == 19) {
        tempPar = parContent.substring(k, i);
        tempPar = tempPar.concat("- \n");
        desc.appendChild(document.createTextNode(tempPar));
        desc.appendChild(document.createElement('br'));

        tempPar = "";
        //Restart j
        j = 0;
        //update k
        k = i;
        continue;
    }
    j++;
}
// No need for textContent anymore. Appending nodes did the work for us!

答案 2 :(得分:0)

只是为了好玩:Array.forEachString.slice方法:

var desc = document.querySelector('#desc');
var parContent = desc.textContent.trim();
var block = 0;
parContent.split('').forEach(
  function(v, i) {
    if (i % 19 == 0) {
      desc.appendChild(document.createTextNode(parContent.slice(block, i)));
      desc.appendChild(document.createElement('br'));
      block = i;
    } 
  }
);
// last part
desc.appendChild(document.createTextNode(parContent.slice(block)));
<p id="desc">
  This string should be truncated every 19th position right? 
  Ok, let's give it a try using [Array.forEach]<br>
</p>

答案 3 :(得分:0)

还有一个简单的正则表达式版本来包装文本:

function Wrap(src, maxLineLength) {
    return src.replace(new RegExp("(.{1,"+maxLineLength+"})", "g"), "$1<br/>\r\n");
}

虽然这包含了字符,而不是文字。