2016-04-04 17 views
-2

Dinamik olarak oluşturulmuş grafikler kullanan bazı kodlar üzerinde çalışıyorum. Ve tüm bu grafiklerin y ekseninde efsaneleri var. Şimdi amacım, en uzun legend dizesinin ne kadar uzun olduğunu kontrol etmektir ve en uzun olanı 20 karakterden büyükse, sadece her dizenin ilk karakterlerini göstermek istiyorum.Dinamik olarak oluşturulmuş metin öğelerini değiştir

Aşağıdaki kodla, istenen kısaltılmış dizeleri uyardığımda ulaştım; ama şimdi bu yeni dizelerle metni nasıl değiştireceğimi bilmiyorum.

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

Ben böyle bir şey denedim: Ben yeni dize ile tüm metin etiketi ve özelliklerin tümüyle değiştirilir beri Bununla

$(labelStrings).replaceWith(subString) 

, ben hiç efsane vardı.

Etiket ve değerlerine hiç dokunmamanın herhangi bir yolu var, ancak açılış ve kapanış etiketi arasındaki metni değiştirelim mi?

Şimdiden teşekkürler! Eğer SO, yine kullanabilirsiniz gelmeden önce Google'ı araştırma gerektiğini temelleri olan

+0

metin genişliğini ölçmek için, [hesaplamak] (http://stackoverflow.com/a/21015393/1762224)'. –

cevap

0

STH arasındaki tek iç içeriği değişecektir. bunun gibi? ` kullanılarak

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

Çok teşekkür ederim. Yaradı! – SaltyM

0

$(labelStrings).html(subString) veya $(labelStrings).text(subString) - ikisi de etiketleri

+0

Bu, tüm dizeleri aynı dizeyle değiştiriyor. – SaltyM

+0

labelStrings belgenizde ne seçer? Hangisini değiştirmek istersiniz? –

+0

labelStrings, grafik için gereken tüm dizeleri buluyor. Yani "İlk Etiket", "İkinci Etiket" ve "Üçüncü Etiket". Şu anda hepsi "Üçüncü" olarak değiştirildi (sadece ilk karakterleri göstermek istediğim için). İstenilen "İlk", "İkinci", "Üçüncü". – SaltyM

İlgili konular