2014-01-13 7 views
5

좋은 코드입니다. 줄임표 텍스트를 쿼리하고 가져올 수 있는지 궁금합니다. 즉, 원본 텍스트가 아닌 점으로 표시됩니다. 나는 텍스트jquery를 사용하는 줄임표 텍스트 만 가져 오기

를 추가하는 경우

이이 긴 센있다가

로 단축됩니다 긴 문장

과 (생략에 대한 관련 CSS를 사용)입니다 ...

xt

"This is a long sen ..." 

$("p") 원본 개체가 아닌 DOM 개체?

+4

['text-overflow : ellipsis'] (https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow)를 사용할 때를 의미합니까? CSS는 필요에 따라 CSS를 추가합니다. 그들은 실제로 DOM의 일부가 아니므로 JavaScript를 사용하여 계산할 수 없습니다. – Blazemonger

+7

"좋은 코드"란 무엇입니까? –

+1

@Blazemonger는 아마도 맞다고 생각하지만 어쨌든 왜 필요합니까? 아마도 귀하의 요구 사항을 해결할 방법이있을 것입니다. –

답변

0

l에는 브라우저 별 조정이 필요합니다.

자바 스크립트 :

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 : 누군가가 원인을 파악 할 수있는 경우를 제외하고는 offset 요구, 브라우저에 따라 변경할 수 있다는 경고와

#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; 
} 

.

나는 letter-spacing 또는 이와 동등한 것으로 의심됩니다.

+0

Nope http : //jsfiddle.net/j08691/axHs8/2/. 내가 한 일은 div의 단어에 공백을 추가하는 것뿐이었습니다. – j08691

+0

위대한 스크립트이지만 여기에 여러 줄이 있으면 작동하지 않습니다. – SearchForKnowledge

+0

'Chrome 43.0.2357.130 (64 비트)'에서 작동하지 않습니다. –

관련 문제