有没有办法通过jQuery抓取CSS截断的文本?
Is there any way to grab the CSS truncated text via jQuery?
我试图从一个CSS截断元素抓取HTML,似乎不能得到它的权利。
例如:<span id=mySpan style=white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:50px>This is the contents of the span tag. It should truncate with an ellipsis if it is longer than 50px.</span>
如果我使用标准的jQuery方法抓取HTML,我得到的是全文,而不是截断的版本。我甚至不确定这是否可能。
html = jQuery('#mySpan').html();
text = jQuery('#mySpan').text();
都返回全文。我一头雾水。
你可以计算:
$.fn.renderedText = function(){
var o = s = this.text();
while (s.length && (this[0].scrollWidth>this.innerWidth())){
s = s.slice(0,-1);
this.text(s+"…");
}
this.text(o);
return s;
}
var renderedText = $("#mySpan").renderedText(); // this is your visible string
示范当然,这只适用于具有overflow:hidden;text-overflow:ellipsis
的元素,但当没有text-overflow:ellipsis
时,很容易适应:只需删除+"…"
。
请注意,这与所有浏览器兼容,并给出确切的结果(w3.org指定浏览器将使用…
字符)。
@dystroy给出了一个很好的答案,这里有另一种(更未来友好的)方法来做到这一点。
可以使用document.caretPositionFromPoint
。这几乎只是一个FF函数,但大多数其他浏览器都以自己的函数名和API提供了相同的功能。不,我不知道浏览器对开发者有什么不利,但是…
我们的方法是这样的:
- 选择元素
- 获取客户端位置边界
- 将其放入上述函数中以获取文本偏移位置
- 减去3,从偏移 中删除省略号。
- 根据
textContent
属性的偏移量提取文本
下面是一个快速的演示(应该在Webkit和Gecko中正常工作):
function getRenderedText (el) {
var pos = el.getBoundingClientRect();
var offset, range;
if (document.caretRangeFromPoint) {
range = document.caretRangeFromPoint(pos.right, pos.top);
offset = range.endOffset - 3;
}
else if (document.caretPositionFromPoint) {
range = document.caretPositionFromPoint(pos.right, pos.top);
offset = range.offset - 3;
}
else {
console.error('Your browser is not supported yet :(');
}
return el.textContent.slice(0, offset);
}
console.log(getRenderedText(el));
span {
text-overflow: ellipsis;
width: 40px;
white-space: nowrap;
display: block;
overflow: hidden;
}
<span id="el">foo bar is so much awesome it is almost the bestest thing in the world. devs love foo bar. foo bar all the things!</span>
在某些情况下(奇怪的字体或边缘情况),我看到了最大1个字符的错误,但大多数情况下,它工作得很好。
希望有帮助!
相关文章:
- 使用CSS/JavaScript更改剑道图工具提示文本颜色
- CSS/HTML:更改文本的值并在悬停时从中心展开
- CSS无法处理文本区域
- 为未标记的文本添加CSS样式
- CSS-在文本中滑动
- 不使用自定义CSS或HTML(使用框架方法)的角度材质文本输入或文本区域标签大小
- 如何使用jquery更改文本输入的css
- 有CSS问题:can't将文本放置在选择框的右侧
- 检查所选文本是否在给定的CSS类中
- 如何在android中使用HTML/CSS赋予文本渐变颜色
- javascript或css:如何隐藏后面跟着句点前缀的任何数字"1.文本”"2.文本“"
- 如何使用jquery/js/css逐步突出显示一段文本
- 文本框的 CSS 文本选择覆盖
- Css链接在文本中
- 1.9像素的文本大小显示为1px-Raphael SVG,CSS,Javascript
- 输入占位符文本转换CSS样式
- 重置时输入字段文本css
- 悬停图像链接,更改文本css
- 位于背景图像中心的文本[CSS]
- 用Javascript将文本CSS解析为JSON