Ответ 1
Вы можете использовать d3.select(this.parentNode)
для выбора родительского элемента текущего элемента. А для выбора корневого элемента вы можете использовать d3.select("#invisibleG")
.
Я хочу получить доступ к родительскому элементу текущего элемента
Вот структура HTML
svg
g id=invisibleG
g
circle
g
circle
g
circle
В основном я хочу добавить текст внутри кругов, когда наводил на них курсор.
Итак, я хочу, чтобы что-то подобное зависало в любом конкретном круге
svg
g id=invisibleG
g
circle --> radius is increased and text presented inside that
text
g
circle
g
circle
В режиме hover я могу выбрать текущий элемент через d3.select(this), Как я могу получить корневой элемент (g в моем случае)?
Вы можете использовать d3.select(this.parentNode)
для выбора родительского элемента текущего элемента. А для выбора корневого элемента вы можете использовать d3.select("#invisibleG")
.
Чтобы получить корневой элемент g (как точки кукуоча), можно получить, используя:
circle = d3.select("#circle_id");
g = circle.select(function() { return this.parentNode; })
Это вернет объект d3, на который вы можете вызвать такие функции, как:
transform = g.attr("transform");
Использование
d3.select(this.parentNode)
просто вернет элемент SVG. Ниже я тестировал различные варианты.
// Variant 1
circle = d3.select("#c1");
g = d3.select(circle.parentNode);
d3.select("#t1").text("Variant 1: " + g);
// This fails:
//transform = d3.transform(g.attr("transform"));
// Variant 2
circle = d3.select("#c1");
g = circle.node().parentNode;
d3.select("#t2").text("Variant 2: " + g);
// This fails:
//transform = d3.transform(g.attr("transform"));
// Variant 3
circle = d3.select("#c1");
g = circle.select(function() {
return this.parentNode;
});
transform = d3.transform(g.attr("transform"));
d3.select("#t3").text("Variant 3: " + transform);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<html>
<body>
<svg height="200" width="300">
<g>
<circle id="c1" cx="50" cy="50" r="40" fill="green" />
</g>
<text id="t1" x="0" y="120"></text>
<text id="t2" x="0" y="140"></text>
<text id="t3" x="0" y="160"></text>
</svg>
</body>
</html>