迭代选择时如何访问 `this` 的 "previous sibling"?
How to access "previous sibling" of `this` when iterating over a selection?
在下面的代码中,假设$sel
是一些任意d3.js选择:
$sel.each(function(d, i, j) {
var prev = ??? ;
...
});
我可以用什么替换 ???
以分配给 prev
d3.js 选择由 this
[=26= 的前一个兄弟组成](如果存在的话)?
(如果 this
是第一个 child,因此没有前一个兄弟,则应将一个空的 d3.js 选择分配给 prev
。)
可能就这么简单
var prev = d3.select(this.previousSibling);
如果您只对元素节点感兴趣,您会选择
var prev = d3.select(this.previousElementSibling);
d3.selectAll(".c").each(function() {
console.log(d3.select(this)); // Element <p class="c"></p>
console.log(d3.select(this.previousSibling)); // text node containing whitespace between b and c
console.log(d3.select(this.previousElementSibling)); // Element <p class="b"></p>
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<div>
<p class="a"></p>
<p class="b"></p>
<p class="c"></p>
<p class="d"></p>
<p class="e"></p>
</div>
在下面的代码中,假设$sel
是一些任意d3.js选择:
$sel.each(function(d, i, j) {
var prev = ??? ;
...
});
我可以用什么替换 ???
以分配给 prev
d3.js 选择由 this
[=26= 的前一个兄弟组成](如果存在的话)?
(如果 this
是第一个 child,因此没有前一个兄弟,则应将一个空的 d3.js 选择分配给 prev
。)
可能就这么简单
var prev = d3.select(this.previousSibling);
如果您只对元素节点感兴趣,您会选择
var prev = d3.select(this.previousElementSibling);
d3.selectAll(".c").each(function() {
console.log(d3.select(this)); // Element <p class="c"></p>
console.log(d3.select(this.previousSibling)); // text node containing whitespace between b and c
console.log(d3.select(this.previousElementSibling)); // Element <p class="b"></p>
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<div>
<p class="a"></p>
<p class="b"></p>
<p class="c"></p>
<p class="d"></p>
<p class="e"></p>
</div>