2013-04-30 2 views
0

У меня есть несколько SVG элементов текста, как это на дне:D3 Выбора SVG элементы текст

<svg width="750" height="3860"><g transform="translate(10,30)"> 
<rect class="bar negative Tuvalu" x="29.51594399999999" y="0" width="528.934056" country="Tuvalu" height="20" style="stroke: #ffffff;"></rect> 
... 
<text class="recipient Somalia unselected_text" y="40" x="558.45" style="font-size: 14px;" country="Somalia" dx="3" dy="-0.45em">Somalia -79.7545</text> 
<text class="recipient Tuvalu" y="20" x="558.45" style="font-size: 14px;" country="Tuvalu" dx="3" dy="-0.45em">Tuvalu -85.2432</text> 
... 

Я пытаюсь выбрать только текстовые элементы с помощью панели, используя это, где COUNTRYNAME является имя_классом:

var className = "text." + countryname 
var textNode = d3.select("#barchart").select(className) 

но результат, который я получаю в Chrome, представляет собой массив из 1, где позиция 0 равна нулю. Если я выбираю только «. {Countryname}», он работает, но я хочу только указать текстовые узлы. Первый способ действительно работает на моем одном графике, но когда я создаю новый график с разными данными, он не работает.

+0

ли вы изменить что-нибудь еще при добавлении нового графа с различными данными, например, изменить идентификатор диаграммы? –

ответ

1

Я воспроизвел ваш упрощенный код и работает как ожидалось. Поэтому вам нужно будет показать нам больше.

<div id="barchart"> 
<svg width="750" height="3860"> 
    <g transform="translate(10,30)"> 
    <rect class="bar negative Tuvalu" x="29.51594399999999" y="0" width="528.934056" country="Tuvalu" height="20" style="stroke: #ffffff;"></rect> 
    <text class="recipient Somalia unselected_text" y="40" x="558.45" style="font-size: 14px;" country="Somalia" dx="3" dy="-0.45em">Somalia -79.7545</text> 
    <text class="recipient Tuvalu" y="20" x="558.45" style="font-size: 14px;" country="Tuvalu" dx="3" dy="-0.45em">Tuvalu -85.2432</text> 
    </g> 
</svg> 
</div> 

<script type="text/javascript"> 
    var countryname = 'Somalia'; 
    var className = "text." + countryname; 
    var textNode = d3.select("#barchart").select(className); 
    console.log(textNode); 
</script> 

Кстати, вы можете также фильтровать выбор набора по имени класса, если вам нужно больше контроля:

var textNode = d3.select("#barchart").selectAll("svg text").filter(function(d, i){ return this.classList.contains(countryname); }); 
Смежные вопросы