W tym dokumencie HTML:
<html>
<body>
<div id="viz">
</div>
<body>
</html>
stosujące niniejszy kod:
var viz = d3.select('#viz').selectAll('p').data([0])
.enter().append('p');
Daje to wynik:
<html>
<body>
<div id="viz">
<p></p>
</div>
<body>
</html>
To dlatego selectAll()
definiuje element nadrzędny na podstawie poprzedniego select
metoda, która jest select('#viz')
. W ten sposób:
console.log(viz[0].parentNode) // <div id="viz">
Zważywszy, jeśli wykonać następujący kod w pierwszym dokumencie HTML:
var viz = d3.select('#viz').select('p').data([0])
.enter().append('p');
Daje to wynik:
<html>
<body>
<div id="viz">
</div>
<body>
<p></p> <!-- your p element is appended to <html> as its parent element
</html>
Ponieważ selectAll()
jest wymagane do przedefiniować element nadrzędny zaznaczenia, element nadrzędny dla zaznaczenia jest nadal ustawiony domyślnie na <html>
. Jeśli zarejestrujemy węzeł nadrzędny zaznaczenia:
console.log(viz[0].parentNode) // <html>
Pamiętaj, że selections are arrays (groups) of arrays of elements. Zapisywanie viz[0]
uzyskuje pierwszą grupę elementów, a nie pierwszy element Twojego wyboru. Aby uzyskać pierwszy element należy napisać:
console.log(viz[0][0].parentNode)
która daje elementu nadrzędnego tego konkretnego elementu w drzewie DOM, a nie w grupie selekcji D3.