2014-05-19 5 views
9

Ich habe ein div mit etwas Text darin, der anfänglich nicht umschließt und eine Ellipse zeigt, aber ich möchte dem Benutzer die Möglichkeit geben, auf eine Leseoption zu klicken und dann das div zu erweitern, um den gesamten Text anzuzeigen.Ist es möglich zu erkennen, ob Text länger als eine Zeile in meinem div ist?

Allerdings möchte ich in der Lage sein zu erkennen, ob der Text klein genug ist, um in das div zu passen, ohne es aus einer Zeile zu erweitern, und wenn ja, verstecken Sie die Show mehr Option.

Hier ist ein Link zu einem modifizierten JS Fiddle Ich habe Abarbeiten worden:

http://jsfiddle.net/M2APS/44/

Und der Code von ihm:

HTML:

<div data-role="page" id="p1"> 
<div data-role="content">  
<ul data-role="listview" data-inset="true"> 
    <li data-role="list-divider">Item Title</li> 
    <li> 
     <div class="less"> 
      Need to detect if this text is long enough to show the "Read More" if it is not don't 
     </div> 
     <div class="text-size">Read more...</div> 
    </li> 
</ul>  

CSS:

.less{ 
word-wrap: break-word; 
white-space: nowrap; 
text-overflow: ellipsis; 
overflow: hidden; 
} 

.more{ 
white-space: normal; 
} 

.text-size{ 
display: block; 
text-align: right; 
padding-top: 10px; 
color: blue !important; 
cursor: pointer; 
} 

JS:

$(document).bind('pageshow', function() { 
    $(".text-size").click(function(){ 
     $(".ui-li > div").toggleClass("less"); 
     if($(".text-size").html() == "Read more...") 
     { 
      $(".text-size").html("Read less..."); 
     } 
     else 
     { 
      $(".text-size").html("Read more..."); 
     } 
    }); 
}); 

Ist es möglich, zu erkennen, ob der Text kurz genug ist, innerhalb des div zu passen und dann verstecken die weitere Option lesen?

+1

FYI ab jQuery 1,7, die .auf() Methode ist die bevorzugte Methode für die zu einem Dokument, Event-Handler zu befestigen. – j08691

+1

Diese Frage ist ein [** Duplikat **] (http://stackoverflow.com/questions/7738117/html-text-overflow-ellipsis-detection). – blex

+0

Danke für das Zeigen von Blex Ich habe eine Suche vor dem Erstellen meiner Frage gemacht, aber diese eine verpasst. –

Antwort

7

Sie können DIV vergleichen width mit scrollWidth zu erkennen, ob Text überfüllt ist:

if ($('.less')[0].scrollWidth <= $('.less').width()) { 
    $(".text-size").hide(); 
} 

Demo: http://jsfiddle.net/ygalanter/M2APS/50/

+0

Dies funktioniert nur für mich für Vollbildschirme auf einem Desktop. Ist es weg, um dies dynamisch auf verschiedene Bildschirmgrößen anzuwenden, da meine mobile Website über eine Reihe verschiedener Mobilteile und Tablets hinweg angezeigt wird und darauf scheint das nicht zu funktionieren? –

+1

Können Sie versuchen, die DIV feste Breite zu geben? Er kann basierend auf der aktuellen Bildschirmbreite berechnet und in JS-Code in Pixel zugewiesen werden. –

+0

Danke, ich werde das versuchen! –

0

Dies ist wahrscheinlich unvollständig, aber Sie möchten möglicherweise etwas basierend auf der .height() -Methode tun, die jQuery Ihnen bereitstellt ())

$(document).bind('pageshow', function() { 
if($(".ui-li > div").height() > 20) { 
    $(".ui-li > div").addClass("less"); 
    $(".text-size").click(function(){ 
     $(".ui-li > div").toggleClass("less"); 
     if($(".text-size").html() == "Read more...") 
     { 
      $(".text-size").html("Read less..."); 
     } 
     else 
     { 
      $(".text-size").html("Read more..."); 
     } 
    }); 
} else { 
    // one liner 
    $(".text-size").hide(); 
} 

});

Überprüfen Sie meine Lösung in Fiddler.

http://jsfiddle.net/gZe8b/