div 纯文本中的新行,br

Posted

技术标签:

【中文标题】div 纯文本中的新行,br【英文标题】:new lines, br in div plain text 【发布时间】:2013-12-23 05:57:05 【问题描述】:

好的,这应该很简单......

使用角度。 我输出一个文本,已经用 textarea 编辑过:

model | newline2br

如果我不添加过滤器,所有新行都会被忽略。 所以我做了一些谷歌搜索,并写了一个过滤器,newline2br, 就是这样做的——用<br />替换新行

但现在文本显示为文字 <br />!

这是检查窗口中的输出:

<div ng-show="showText" ng-mouseleave="showText = false" class="textwrapper ng-hide">asdjfhaslkjdfh aoiuyqoiweury iufyaoiusydf oiuaysdfiouy aiuysdfoiuy asdfo iuyasdf iouyasdfoiuy asdoifuy aoiusydf oiauysdfoiuays df oiauysdf iouaysdofiuy asioduyf aoiusydf oiauysdfo iuyasdoiufy aoisudyf oiuaysdifuy asdoiufysf<br />hello this is cool<br />I just found out that I can do shift-enter!<br />now I solved the problem with this... :))))</div>

这是为什么呢? 如何正确编写过滤器以便 div 显示新行?

【问题讨论】:

你能在 jsfiddle 上展示你的代码吗?很难确定发生了什么。 好吧,我没有设法让 jsfiddle 运行 angular...但是代码在那里:jsfiddle.net/VLCSL 【参考方案1】:

这是因为 AngularJS 默认在字符串中转义 html 标记(将它们替换为 HTML 实体),以使您免受 XSS 和其他一些安全问题的影响。要显示未转义的受信任内容,您可以使用 ngBindHTMLUnsafe(在旧 AngularJS 版本中)或 1.2 及更高版本中的 ngBindHTML ans SCE。例如:

<div>sometext|newline2br</div>

将被改写为(1.2以下):

<div ng-bind-html-unsafe="sometext|newline2br"></div>

1.2及以上版本:

<div ng-bind-html="sometext|newline2br|trusted"></div>

使用受信任的过滤器:

app
  .filter('trusted', function($sce) 
    // You can use this one as `value|newline2br|trusted`, 
    // but I don't recommend it
    return function(input) 
      return $sce.trustAsHtml(input)
    
  )

或者更好:

<div ng-bind-html="sometext|newline2br"></div>

和:

app
  .filter('newline2br', function($sce) 
    // This is my preferred way
    return function(input) 
      return $sce.trustAsHtml(input.replace(/\n/g, "<br>"))
    
  )

Plunker:http://plnkr.co/LIxFVpi6ChtTLEni11qy

【讨论】:

【参考方案2】:

你可能也应该有这个,否则你将永远看不到文本,因为它永远不会首先出现:

ng-init="showText=true"

除了 tungd 提到的内容之外,您要寻找的最后一件事是:

<div class="textwrapper" ng-bind-html-unsafe="model|newline2br" ng-init="showText=true" ng-show="showText" ng-mouseleave="showText = false">

这里是fiddle to demonstrate。

【讨论】:

【参考方案3】:

据我了解,您隐藏了 div,因此鼠标永远无法越过它以首先显示 div。

【讨论】:

好吧,之前有一个封闭的跨度,可以做到这一点,但这与问题无关,我认为:span(ng-mouseover="showText = true") 感谢参与。我在这里找到了答案:***.com/questions/15449325/…。我现在使用的是没有过滤器的
 。正确显示新行

以上是关于div 纯文本中的新行,br的主要内容,如果未能解决你的问题,请参考以下文章

在文本区域中将新行更改为 <br>

无法将 div 中的纯文本与文本溢出一起垂直对齐:省略号

textarea 中的新行 <br> 未解释

contentEditable div 中的粗体选定文本,使用纯 JavaScript,不使用 jQuery 等库

将 <br> 解析为纯文本新段落

PHP 用 <br/> 替换文字 \r\n (不替换新行)