I have a rough draft что нуждается в настройке конкретного браузера.
JavaScript:
jQuery.fn.getShowingText = function() {
// Add temporary element for measuring character widths
$('body').append('<div id="Test" style="padding:0;border:0;height:auto;width:auto;position:absolute;display:none;"></div>');
var longString = $(this).text();
var eleWidth = $(this).innerWidth();
var totalWidth = 0;
var totalString = '';
var finished = false;
var ellipWidth = $('#Test').html('…').innerWidth();
var offset = 7; // seems to differ based on browser (6 for Chrome and 7 for Firefox?)
for (var i = 0;
(i < longString.length) && ((totalWidth) < (eleWidth-offset)); i++) {
$('#Test').text(longString.charAt(i));
totalWidth += $('#Test').innerWidth();
totalString += longString.charAt(i);
if(i+1 === longString.length)
{
finished = true;
}
}
$('body').remove('#Test'); // Clean up temporary element
if(finished === false)
{
return totalString.substring(0,totalString.length-3)+"…";
}
else
{
return longString;
}
}
console.log($('#ellDiv').getShowingText());
CSS:
#Test {
padding:0;
border:0;
height: auto;
width: auto;
position:absolute;
white-space: pre;
}
div {
width: 100px;
white-space: nowrap;
border: 1px solid #000;
overflow:hidden;
text-overflow:ellipsis;
padding:0;
}
С оговоркой, что offset
потребности изменить в зависимости от браузера, если кто-то не может понять, что является причиной его.
Я подозреваю letter-spacing
или аналогичный?
Вы имеете в виду при использовании ['text-overflow: ellipsis'] (https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow)? Нет, CSS добавляет их по мере необходимости; они не являются частью DOM и поэтому не могут быть вычислены с использованием JavaScript. – Blazemonger
Что такое «хороший код», о котором вы говорите? –
Я думаю, что @Blazemonger, вероятно, прав, но зачем вам это нужно? Возможно, есть путь вокруг вашего требования. –