2014-01-13 10 views
5

Guter Code, nur gefragt, ob es möglich ist, abzufragen und die Ellipse Text (d. H. Mit den Punkten in und nicht den ursprünglichen Text)?Erhalten Sie nur die Ellipse Text mit jquery

Wenn ich den Text

Dieses Add ist ein langer Satz

und (mit der entsprechenden CSS für Auslassungspunkte), um es

verkürzt wird Dies ist ein langer sen ...

Gibt es eine Möglichkeit, die te zu bekommen xt

"This is a long sen ..." 

vom $("p") DOM-Objekt anstatt der ursprünglichen Text?

+4

Meinst du bei Verwendung von ['text-overflow: ellipsis'] (https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow)? Nein, CSS fügt diese nach Bedarf hinzu. Sie sind nicht Teil des DOM und können daher nicht mit JavaScript berechnet werden. – Blazemonger

+7

Was ist der "nette Code", auf den du dich beziehst? –

+1

Ich denke @Blazonger ist wahrscheinlich richtig, aber warum brauchst du es trotzdem? Vielleicht gibt es einen Weg um Ihre Anforderung. –

Antwort

0

I have a rough draft, dass einige Browser-spezifische Tweaking benötigt.

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

Mit dem Vorbehalt, dass die offset Bedürfnisse Browser zu ändern, je nach, es sei denn, jemand herausfinden kann, was es verursacht.

Ich vermute letter-spacing oder ähnliches?

+0

Nein http : //jsfiddle.net/j08691/axHs8/2/. Alles, was ich getan habe, war, dem Wort im Div Leerzeichen hinzuzufügen. – j08691

+0

Großartiges Skript, aber es funktioniert nicht, wenn hier mehrere Zeilen sind. – SearchForKnowledge

+0

Funktioniert nicht in 'Chrome 43.0.2357.130 (64-Bit)' –

Verwandte Themen