LoginSignup
4
5

More than 5 years have passed since last update.

サーバでd3.jsを使ってSVGを生成する.

Last updated at Posted at 2015-03-14

d3.jsをサーバで動かした時のサンプル.
jsdomでDOMを生成して,HTMLタグ要素に変換している.

環境

  • Linux
  • Node.js v0.10.3x
  • Node.js package
    • jsdom
    • d3.js

コード

処理の流れは以下.
- DOMを生成.global.documentに渡す.
- d3をロードして,DOMを参照する.
- d3.jsでDOMにデータを追加して,HTMLに出力する.
- SVGを削除

serversideJS
// モジュールの読み込み
try {
  var jsdom        = require('jsdom').jsdom; // d3モジュールの前にjsdomをロードしておくこと

  global.document  = jsdom('<html><body><div id="container"></div></body></html>'); // DOMを生成する
  var d3           = require('d3');

} catch(error) {
  ...
}

// SVGを生成する
function createSvg() {
  d3.select('#container')
    .append('svg') // SVGを追加
    .attr('id', 'hoge') // SVGのID
    .attr('xmlns', 'http://www.w3.org/2000/svg')
    .attr('version',  '1.1')
    // 以下,SVGに追加する要素を記述

  // SVGデータをHTML形式に変換する.
  var svgHtmlTag = d3.select('#container').node().innerHTML;
  // => <svg id='hoge' xmlns='http://www.w3.org/2000/svg' version=''1.1''>...</svg>

  output(); // どこかに出力

  d3.select('#hoge').remove(); // hogeを削除.
}

(function () {
  createSvg();
})();

困った所

d3.selectで要素の指定方法と範囲が良く理解できていなかったので,ハマりました.
DOM構造を理解していないと,”どこ”のツリーを指しているのか分からず,思うようにデータが消えませんでした.

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5