有没有办法使用jQuery获取一个块内容的第5行(第一个字母的偏移量)?
我的意思是视觉线,浏览器计算线,而不是源代码中的行。
答案 0 :(得分:5)
jQuery.fn.line = function(line) {
var dummy = this.clone().css({
top: -9999,
left: -9999,
position: 'absolute',
width: this.width()
}).appendTo(this.parent()),
text = dummy.text().match(/\S+\s+/g);
var words = text.length,
lastTopOffset = 0,
lineNumber = 0,
ret = '',
found = false;
for (var i = 0; i < words; ++i) {
dummy.html(
text.slice(0,i).join('') +
text[i].replace(/(\S)/, '$1<span/>') +
text.slice(i+1).join('')
);
var topOffset = jQuery('span', dummy).offset().top;
if (topOffset !== lastTopOffset) {
lineNumber += 1;
}
lastTopOffset = topOffset;
if (lineNumber === line) {
found = true;
ret += text[i];
} else {
if (found) {
break;
}
}
}
dummy.remove();
return ret;
};
$('#someParagraph').line(3); // blah blah blah
它遍历整个元素(实际上是元素的克隆),在每个单词中插入 <span/>
元素。跨度的顶部偏移量被缓存 - 当此偏移量发生变化时,我们可以假设我们处于新线上。
答案 1 :(得分:1)
嗯,有一种方法可以猜测它,它并不漂亮,但我以前用过它。
算法基本上是这样的:
它并不漂亮,但如果您正确复制元素,它就会起作用。
答案 2 :(得分:-4)
你可以使用javascript .split()并用“&lt; br&gt;”分隔。