2014-05-19 32 views
9

Ho un div con del testo che inizialmente non si avvolge e mostra un'ellissi ma voglio dare all'utente la possibilità di fare clic su un'opzione di lettura più e quindi espandere il div per mostrare l'intero testo.È possibile rilevare se il testo è più lungo di una riga nel mio div?

Tuttavia, voglio essere in grado di rilevare se il testo è abbastanza piccolo da stare nel div senza doverlo espandere da una riga e in tal caso nascondere l'opzione show più.

Ecco un link ad un JS Fiddle modificato Ho lavorato fuori:

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

E il codice da esso:

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..."); 
     } 
    }); 
}); 

è possibile rilevare se il testo è abbastanza breve per adattarsi all'interno del div e poi nascondere il read more opzione?

+1

FYI come di jQuery 1.7, il metodo .on() è il metodo preferito per collegare i gestori di eventi a un documento. – j08691

+1

Questa domanda è un [** duplicato **] (http://stackoverflow.com/questions/7738117/html-text-overflow-ellipsis-detection). – blex

+0

Grazie per aver sottolineato che blex ho fatto una ricerca prima di creare la mia domanda ma l'ho persa. –

risposta

7

È possibile confrontare i DIV width con scrollWidth per rilevare se il testo è straripante:

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

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

+0

Questo funziona solo per me per schermi a larghezza intera su un desktop. È lì per applicare dinamicamente questo a diverse dimensioni dello schermo mentre il mio sito web mobile verrà visualizzato su una gamma di telefoni e tablet diversi e su di essi questo non sembra funzionare? –

+1

Si può provare a dare la larghezza fissa DIV? Può essere calcolato in base alla larghezza dello schermo corrente e assegnato in pixel nel codice JS. –

+0

Grazie, ci proverò! –

0

Questo è probabilmente incompleto, ma potresti voler fare qualcosa in base al metodo .height() fornito da jQuery (http://api.jquery.com/height/)

$(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(); 
} 

});

Controlla la mia soluzione in violinista.

http://jsfiddle.net/gZe8b/