后端返回的JavaScript中的“str”变量包含一个字符串,其中有几段用断路器分隔..当我这样做时:
console.log(str);
Firefox控制台显示:
"This is paragraph 1.
This is paragraph2.
This is paragraph3"
问题是,这个str没有用“\ n”字符分隔。正如您在控制台输出中看到的那样,它只是由不可见的换行符分隔开来。有没有办法检测这个换行符?我最终要做的是用“br”标签替换这些不可见的换行符,以便我可以将它附加到html文档中。
有办法做到这一点吗?
由于
(不幸的是,没有办法改变后端..)
答案 0 :(得分:2)
看看nl2br on php.js,这看起来正是您正在寻找的。基本上,它是:
function nl2br (str, is_xhtml) {
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}
演示:http://devilmaycode.altervista.org/jquery-convert-line-breaks-to-br-nl2br-equivalent/
答案 1 :(得分:0)
var text = "This is paragraph 1.
This is paragraph2.
This is paragraph3";
var matches = text.match(/\n/g);
var new_lines = matches ? matches.length : 0; //Get no. of new line here
答案 2 :(得分:0)
实际上,Firefox控制台中的“隐形换行符”是\n
个字符。我在下面的代码中添加了一行来确认这一点。此外,浏览器通常会忽略\n
字符而使用<br/>
,因此您拥有的str变量应该很好地显示为一行。但要识别“\ n”字符并将其替换为<br />
,请尝试使用
<span id="someText">This is
some text
that I need
to modify
</span>
<script>
var text = document.getElementById("someText") ;
alert(text.innerHTML.match(/\n/g).length) ; // confirm \n are in var
alert (text.innerHTML) ;
var withBRs = text.innerHTML.replace(/\n/g, "<br />") ;
text.innerHTML = withBRs ;
</script>
答案 3 :(得分:0)
作为另一种思想(如果可能的话,在您的情况下),因为您基本上希望在保留换行符的情况下以HTML格式呈现文本,您可以使用CSS为您执行此操作。请查看white-space
属性,其值为pre-line
或pre-wrap
:
空格的序列将折叠成单个空格。文本将在必要时包装,并在换行符时 - W3Schools
因此,如果您将字符串作为段落附加到DOM:
<p class="preserveLineBreaks">This is paragraph 1.
This is paragraph2.
This is paragraph3<p>
然后使用如下的简单CSS选择器,您将获得预期的结果:
.preserveLineBreaks {
white-space: pre-line; //or pre-wrap
}