2014-07-07 4 views
1

Я сделал простую диаграмму пончиков (на основе примера Google Визуализации в https://google-developers.appspot.com/chart/interactive/docs/gallery/piechart#donut).Диаграмма отображения Google Визуализация - изменение текстовых координат

Поскольку он показывает только один фрагмент (другой прозрачный/невидимый), я хотел бы переместить элемент <text> в центр диаграммы, то есть внутри отверстия. Я знаю, что это просто связано с обновлением атрибутов координат «x» и «y», но у меня возникают проблемы с доступом к ним в DOM, в частности, поскольку нет ID/классов для зависания.

Итак, как я могу настроить таргетинг на элемент <text> элемента предпоследнего <g> в элементе? Я хотел бы изменить x="239.45622566746957" y="285.69328724429994" к x="200" y="200"

предпочтительным Javascript, но JQuery также хорошо ...

<div id="donutchart" style="position: relative;"> 
    <div style="position: relative; width: 560px; height: 412px;" dir="ltr"> 
     <div style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;"> 
      <svg width="560" height="412" style="overflow: hidden;" aria-label="A chart."> 
       <defs id="defs"/> 
       <rect x="0" y="0" width="560" height="412" stroke="none" stroke-width="0" fill="#ffffff"/> 
       <g> 
        <text text-anchor="start" x="107" y="58.2" font-family="Arial" font-size="12" font-weight="bold" stroke="none" stroke-width="0" fill="#000000">Time spent at work</text> 
       </g> 
       <g> 
        <rect x="340" y="79" width="113" height="31" stroke="none" stroke-width="0" fill-opacity="0" fill="#ffffff"/> 
       <g> 
        <rect x="340" y="79" width="113" height="12" stroke="none" stroke-width="0" fill-opacity="0" fill="#ffffff"/> 
        <g> 
         <text text-anchor="start" x="357" y="89.2" font-family="Arial" font-size="12" stroke="none" stroke-width="0" fill="#222222">Work</text> 
        </g> 
        <rect x="340" y="79" width="12" height="12" stroke="none" stroke-width="0" fill="#b1d123"/> 
       </g> 
       <g> 
        <rect x="340" y="98" width="12" height="12" stroke="none" stroke-width="0" fill-opacity="0" fill="#ffffff"/> 
        <rect x="340" y="98" width="12" height="12" stroke="none" stroke-width="0" fill-opacity="1" fill="none"/> 
       </g> 
      </g> 
      <g> 
       <path d="M179.37407264075225,181.84279120188216L127.43518160188061,144.10697800470538A107,107,0,0,1,214,100L214,164.2A42.800000000000004,42.800000000000004,0,0,0,179.37407,181.84279" stroke="#ffffff" stroke-width="1" fill-opacity="1" fill="none"/> 
       <text text-anchor="start" x="163.54377433253043" y="136.70671275570004" font-family="Arial" font-size="12" stroke="none" stroke-width="0" fill="#ffffff">15%</text> 
      </g> 
      <g> 
       <path d="M214,164.2L214,100A107,107,0,1,1,127.43518,144.10697L179.37407264075225,181.84279120188216A42.800000000000004,42.800000000000004,0,1,0,214,164.19999" stroke="#ffffff" stroke-width="1" fill="#b1d123"/> 
       <text text-anchor="start" x="239.45622566746957" y="285.69328724429994" font-family="Arial" font-size="12" stroke="none" stroke-width="0" fill="#ffffff">85%</text> 
      </g> 
      <g/> 
     </svg> 
    </div> 
</div> 
    <div style="display: none; position: absolute; top: 422px; left: 570px; white-space: nowrap; font-family: Arial; font-size: 12px; font-weight: bold;">85 (85%) 
    </div> 
    <div></div> 
</div> 

ответ

1

Используйте селектор, как это:

document.querySelector('#donutchart svg > g:nth-last-child(2) text'); 

Это не будет работать в IE8, так как более старые версии IE не поддерживают SVG. Если вам нужно поддерживать IE8, вам понадобится селектор для эквивалентной структуры VML.

+0

Спасибо за ответ - хорошо выглядит, но при использовании console.log я получаю «нуль» (также при попытке третьего и т. Д.) ... – neil

+1

Он должен работать; см. этот пример: http://jsfiddle.net/asgallant/EEK2f/ – asgallant

+0

А, я добавлял в качестве отдельного скрипта - очень полезно, спасибо – neil

Смежные вопросы