Обучающие учебники предназначены для создания заметок заметок. Есть несколько небольших различий между Observable и обычным D3, работающим в браузере.
При этом единственная проблема в вашем подходе состоит в том, что append
требует либо строки с именем тега, либо элемента. Если у вас есть строка, просто используйте ее как append("foo")
. Однако, если у вас есть элемент для добавления (в вашем случае, table.node()
), вы должны вернуть его из функции.
Итак, вместо:
d3.select("#main").append(node);
Это должно быть:
d3.select("#main").append(() => node);
Вот ваш код только с этим изменением:
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<div id="main">
Hi
</div>
<script>
const table = d3.create("table");
const tbody = table.append("tbody");
var i, j, row;
for (i = 0; i < 5; i++) {
row = tbody.append("tr");
for (j = 0; j < 3; j++) {
row.append("td").text(`${i},${j}`);
}
}
node = table.node();
d3.select("#main").append(() => node);
</script>
Наконец, если вы пишете обычные сценарии для браузера, просто выбросьте это d3.create()
, а затем append(() => selection.node())
. Вместо этого используйте простую строку тега.