D3.js前置(类似于jQuery前置)


Answers:


126

您可以使用

selection.insert(newElement[, anotherExistingElement])

例如:

selection.insert("div",":first-child")

上面的代码将div在所选元素的第一个子元素之前插入一个。查看文档以了解更多信息。

在任何节点(包括纯文本)之前插入元素的另一种可能方式:

var parentEl = d3.select("div").node();
parentEl.insertBefore(document.createElement("div"), parentEl.childNodes[0]);
<script src="https://d3js.org/d3.v3.min.js"></script>
<div>
  This is a plain text
  <a></a>
</div>


16
这不会,前/中节点的任何明文但是插入
亚当托利


@AdamTolley关于如何在计划文本之前插入的任何建议?
Shruggie '18年

1
@ben我在答案中添加了可能的解决方案。希望能帮助到你。
吉尔莎(Gilsha)

12

Selection.lower()

selection.lower() 将放置一个元素作为其父元素的第一个子元素。

加上D3的追加selection.append().lower()可复制jQuery的前置

由于D3 v4 +,D3同时具有selection.raise()selection.lower()方法。这些元素最常用于在SVG中移动元素,以便某些元素出现在其他元素的顶部,在DOM中SVG元素的顺序决定了绘制顺序。但是,它们可以用于DOM中的任何元素。

这是使用div和段落的快速演示:

该代码段包含一个具有以下内容的div:

Text
<p> Child Paragraph </p>

并使用d3附加一个新段落,然后将其降低,以便其结构如下:

<p>Inserted</p>
Text
<p> Child Paragraph </p>

为了与jQuery的前缀进行比较:

更多信息

selection.lower()是这样实现的(有关更多信息,请参阅文档):

selection.each(function() {
  this.parentNode.insertBefore(this, this.parentNode.firstChild);
});
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.