2012-04-11 14 views
4

Ich habe eine div, die Text (eine Zeichenfolge der Länge S) einer beliebigen Länge, aber eine feste Größe enthält. Ab einer gewissen Länge (nennen wir es L) wird der Text abgeschnitten und der Rest des Textes ist nicht mehr sichtbar. (Technisch gesehen ist der Bereich [0,L) sichtbar, der Bereich [L,S) ist nicht).Javascript: Graf sichtbare Zeichen in div

Was ich tun möchte, ist die Länge L für den Text zu finden, indem nur die sichtbar Anzahl der Zeichen in den div zählen. Alle Zeichen außerhalb des Grenzwerts sollten nicht berücksichtigt werden.

Ich bin froh, 3rd-Party-Bibliotheken wie jQuery etc zu verwenden, wenn das die Arbeit erledigt!

+0

Sie sagen möchten, dass Sie die Anzahl der Zeichen zählen, die in einem 'Überlauf sichtbar sind: hidden' div? –

+0

Ja, das ist richtig. –

Antwort

1

Hier ist eine Funktion, die ich für das Trimmen Text gemacht:

function getTextThatFits(txt, w, fSize, fName, fWeight) { 
    if (fWeight === undefined) 
     fWeight = "normal"; 

    var auxDiv = $("<div>").addClass("auxdiv").css ({ 
     fontFamily : fName, 
     fontSize : parseInt(fSize) + "px", 
     position: "absolute", 
     height: "auto", 
     marginLeft : "-1000px", 
     marginTop : "-1000px", 
     fontWeight: fWeight, 
     width: "auto" 
    }) 
    .appendTo($("body")) 
    .html(txt); 

    var ww = (auxDiv.width() + 1); 
    var str = txt; 

    if (ww > w) 
    { 
     var i = 1, p = 1, u = txt.length, sol = 0; 

     while (p <= u) 
     { 
      i = (p + u) >> 1; 
      str = txt.slice(0, i); 
      auxDiv.html(str); 
      ww = (auxDiv.width() + 1); 
      if (ww <= w) { 
       sol = i; 
       p = i + 1; 
      } 
      else u = i - 1; 
     } 

     str = txt.slice(0, sol); 
    } 
    $(".auxdiv").remove(); 
    auxDiv.remove(); 
    return str.length; 
} 

Ich bin für die Suche nach dem Text binäre Suche, das in eine bestimmte Breite paßt. Um die Funktion zu nutzen, müssen Sie es so nennen:

getTextThatFits(yourText, divWidth, fontSize, fontName, fontWeight=optional) 
+0

Das sieht nach einer fantastischen Antwort aus. Allerdings würde ich es sehr schätzen, wenn Sie mir eine leicht abgewandelte Version zur Verfügung stellen könnten. Was ich wirklich tun muss, ist nicht nur den Text zu bekommen, der passt (obwohl dieser Code großartig ist!), Finde den Index der Zeichenkette, an welchem ​​Punkt die Verkürzung auftritt. Das Problem ist, dass dieses Javascript tatsächlich in einer Webansicht in einer iOS-App ausgeführt wird und ich den Index abrufen muss, damit er mit der ursprünglichen Zeichenfolge verglichen werden kann. –

+0

Die angegebene Funktion wurde so geändert, dass sie die Länge der Zeichenfolge zurückgibt, die passt, nicht die Zeichenfolge selbst. Das bedeutet, dass es den Index der Zeichenfolge zurückgibt, an dem die Kürzung erfolgt. Oder fehlt mir etwas? ... – gabitzish

+0

Perfekt! Vielen Dank. Werde es drehen und sehen, wie es geht. –