Jes*_*ugh 42 html ruby string ruby-on-rails
我在Rails中有一串HTML.我想在一定数量的字符之后截断字符串,不包括HTML标记.此外,如果拆分恰好落在开始和结束标签的中间,我想关闭打开的标签.例如;
html = "123<a href='#'>456</a>7890"
truncate_markup(html, :length => 5) --> "123<a href='#'>45</a>"
Run Code Online (Sandbox Code Playgroud)
msa*_*ler 80
常规truncate
函数工作正常,只是:escape => false
作为一个选项传递,以保持HTML完整.例如:
truncate(@html_text, :length => 230, :omission => "" , :escape => false)
Run Code Online (Sandbox Code Playgroud)
*编辑我没有非常仔细地阅读这个问题(或者根本没有TBH),所以这个答案并没有解决这个问题...这是我碰巧找到的答案,所以希望它可以帮助1或2个人: )
gde*_*ino 36
有两个完全不同的解决方案都具有相同的名称: truncate_html
mas*_*sta 15
你应该用CSS而不是Ruby来解决这个问题.您正在做一些影响DOM布局的事情,并且没有办法以编程方式设计一致的工作方案.
假设您的HTML解析器gem工作正常,并且您找到了大部分时间都能工作的最小公分母字符数.
如果更改字体大小或网站布局会发生什么?你必须再次重新计算字符数.
或者让我们说你的html中有这样的东西:<p><br /></p><br />
这是零个字符,但是它会导致插入大量的空白文本.它甚至可能是带有太多填充或边距的标签<blockquote>
或<code>
标签,使您的布局完全失控.
或者反过来,假设你有这个3 ≅ λ
(3≅λ)这是26个字符长,但为了显示目的它只有5个.
关键在于字符数不会告诉您在浏览器中如何呈现内容.更不用说HTML解析器是有时可能不可靠的大量代码.
这是一些很好的CSS来处理这个问题.:after伪类将在最后一行内容中添加白色淡入淡出.非常好的过渡.
body { font-size: 16px;}
p {font-size: 1em; line-height: 1.2em}
/* Maximum height math is:
line-height * #oflines - 0.4
the 0.4 offset is to make the cutoff look nicer */
.lines-3{height: 3.2em;}
.lines-6{height: 6.8em;}
.truncate {overflow: hidden; position:relative}
.truncate:after{
content:"";
height: 1em;
display: block;
width: 100%;
position:absolute;
background-color:white;
opacity: 0.8;
bottom: -0.3em
}
Run Code Online (Sandbox Code Playgroud)
您可以根据需要添加任意数量的.lines-x
类.我用过em但px也一样好.
然后将其应用于您的元素: <div class="truncate lines-3">....lots of stuff.. </div>
和小提琴:http://jsfiddle.net/ke87h/
归档时间: |
|
查看次数: |
21223 次 |
最近记录: |