除了@SmokeyPhp 答案:
首先,这是一个很好的答案,对我有很大帮助,但是那里的条件有一些错误。
其次,我正在使用 jqlite 库而不是 jQuery,因此该答案在该领域也非常有帮助(他使用的所有方法都是 jqlite 库的一部分)。
除了检测 span 或 div 中的最后一个可见单词之外,我的函数还将其余文本替换为“...”。
我正在发布我正在使用的代码,基本上是 @SmokeyPhp 发布的代码,但在需要的地方进行了修复,我希望其他人能从中受益:
function dotdotdot(containersToDotdotdot) {
function dotdotdotContainers(containers) {
for (var i = 0; i < containers.length; i++) {
var cntnr = $jq(containers[i]);
cntnr.html('<span>' + cntnr.html().replace(/ /g,'</span> <span>') + '</span>');
var words = Array.prototype.slice.call(cntnr.find("span"), 0).reverse();
var lastw = null;
for (var j = 0; j < words.length; j++) {
var w = $jq(words[j]);
var wbot = w.height() + w.offset().top;
var wleft = w.offset().left;
var wright = wleft + w.width();
if (wbot <= (cntnr.offset().top + cntnr.height()) && wleft >= (cntnr.offset().left) && wright <= (cntnr.offset().left + cntnr.width())) {
lastw = words.length - j - 1;
break;
}
}
cntnr.html(lastw === null || lastw === (words.length - 1) ? cntnr.text() : (cntnr.text().split(' ').slice(0, lastw).join(' ') + '...'));
}
}
if (containersToDotdotdot instanceof Array) {
for (var i = 0; i < containersToDotdotdot.length; i++) {
dotdotdotContainers($jq(containersToDotdotdot[i]));
}
} else {
dotdotdotContainers($jq(containersToDotdotdot));
}
}
如您所见,我的 dotdotdot 函数可以将类/id 的数组获取到 dotdotdot,或单个类/id。
$jq 是 jQuery 的 $ 的 jqlite 替代品。
感谢@SmokeyPhp,我找了很长时间不需要jQuery来点点文本的方法,你的方法太棒了。