2016-04-04 15 views
-2

Ich arbeite an Code, der dynamisch generierte Grafiken verwendet. Und all diese Graphen haben Legenden auf der y-Achse. Jetzt ist es mein Ziel zu überprüfen, wie lang der längste Legendenstring ist, und wenn der längste Zeichensatz größer als 20 Zeichen ist, möchte ich nur die ersten Zeichen jeder Zeichenkette anzeigen.Ersetzen Sie dynamisch generierte Textelemente

Mit dem Code unten erreichte ich, dass ich die gewünschten verkürzten Zeichenfolgen alarmieren kann; aber ich weiß nicht, wie ich den Text jetzt mit diesen neuen Zeichenfolgen ändern soll.

var textLengthArray = []; 
var labelStrings = domContainer.find(" g > .brm-y-direction > .tick > text"); 

labelStrings.each(function() { 
    textLengthArray.push($(this).text()); 
}); 

var longestString = textLengthArray.sort(function(a, b) { 
    return b.length - a.length; 
})[0]; 

if (longestString.length >= 20) { 
    $("g.tick text").css("font-size", "9pt"); 
    var offsetLeft = longestString.length * 3.7; 

    textLengthArray.map(function(sub) { 
     var subString = sub.substring(0, 6); 
     alert(subString); 
    }); 
}; 

Ich habe versucht, so etwas wie:

$(labelStrings).replaceWith(subString) 

Damit hatte ich keine Legende überhaupt, da ich den ganzen Text-Tag und alle seine Attribute mit dem neuen String ersetzt haben.

Gibt es eine Möglichkeit, das Tag und seine Werte überhaupt nicht zu berühren, sondern einfach den Text zwischen dem öffnenden und schließenden Tag zu ändern?

Vielen Dank im Voraus!

+0

Wenn Sie Textbreite messen wollen, [berechnen it] (http://stackoverflow.com/a/21015393/1762224) mit '' . –

Antwort

0

etw. so was?

var $nodes = domContainer.find(" g > .brm-y-direction > .tick > text"); 

var longestLength = 0; 
$nodes.each(function(){ 
    longestLength = Math.max(longestLength, $(this).text().length); 
}); 

if(longestLength >= 20){ 
    $("g.tick text").css("font-size", "9pt"); 
    var offsetLeft = longestLength * 3.7; 

    $nodes.each(function(){ 
     var $this = $(this); 
     var text = $this.text(); 
     var substr = text.substr(0, 6); 

     console.log(substr); 

     $this.text(substr); 
    }); 
} 
+0

Vielen Dank. Hat funktioniert! – SaltyM

0

Das heißt basics Sie Google erforschen sollten, bevor SO zu kommen, trotzdem können Sie $(labelStrings).html(subString) oder $(labelStrings).text(subString) verwenden - sie werden beide ändern nur den inneren Inhalt zwischen den Tags

+0

Dies ersetzt alle Zeichenfolgen mit der gleichen Zeichenfolge. – SaltyM

+0

Was wählt labelStrings in Ihrem Dokument - welche möchten Sie ändern? –

+0

labelStrings findet alle Zeichenfolgen, die für das Diagramm benötigt werden. Also "First Label", "Second Label" und "Third Label". Im Moment werden alle bei "Third" ersetzt (da ich nur die ersten Zeichen anzeigen möchte). Gewünscht ist "First", "Second", "Third". – SaltyM

Verwandte Themen