2014-01-13 4 views
5

Приятный код, просто интересно, можно ли запросить и получить текст с многоточием (т. Е. С точками внутри, а не с исходным текстом)?Получите только текст с многоточием, используя jquery

Если добавить текст

Это длинное предложение

и (используя соответствующий CSS для многоточие) он получает сокращен до

Это длинное сено ...

Есть ли способ получить х

"This is a long sen ..." 

от объекта $("p") DOM, а не оригинальный текст?

+4

Вы имеете в виду при использовании ['text-overflow: ellipsis'] (https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow)? Нет, CSS добавляет их по мере необходимости; они не являются частью DOM и поэтому не могут быть вычислены с использованием JavaScript. – Blazemonger

+7

Что такое «хороший код», о котором вы говорите? –

+1

Я думаю, что @Blazemonger, вероятно, прав, но зачем вам это нужно? Возможно, есть путь вокруг вашего требования. –

ответ

0

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('&hellip;').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 или аналогичный?

+0

Nope http : //jsfiddle.net/j08691/axHs8/2/. Все, что я сделал, это добавить пробелы к слову в div. – j08691

+0

Отличный скрипт, но он не работает, если здесь несколько строк. – SearchForKnowledge

+0

Не работает в 'Chrome 43.0.2357.130 (64-разрядный)' –

Смежные вопросы