如何使用dojo获取foreach中的前一个节点

How to get previous node in foreach with dojo

我有一些html如下

<tr>
<td colspan="3">hello</td>
</tr>
<tr class="RowName-Hide-YES" style="">
<td class="form-label-text">Page Tab: </td>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="3">hello</td>
</tr>
<tr class="RowName-Hide-YES" style="">
<td class="form-label-text">Page Tab: </td>
<td></td>
<td></td>
</tr>

我需要select 删除 RowName-Hide-YES 的所有行并将它们与前一行一起隐藏。用class隐藏那些很容易

dojo.query(".RowName-Hide-YES").style("display","none")

然而,要尝试隐藏我试图隐藏的行和上一行:

dojo.query(".RowName-Hide-YES").forEach(function(node){node.style.display="none";node.prev().style.display="none"})

但它抱怨 prev() 不存在。谁能帮我解决这个问题?

你试过自己挂在上面吗?

var previous = null;
dojo.query(".RowName-Hide-YES").forEach(function(node){
  node.style.display="none";
  if (previous) {
    previous.style.display="none";
  }
  previous = node;
});

这将帮助您:

dojo.query(".RowName-Hide-YES").forEach(function(node){ node.closest('tr').style.display="none"; })

我想通了。我需要在 forEach 中再次执行 dojo.query 才能使用 prev

dojo.query(".RowName-Hide-YES").forEach(function(node){node.style.display="none";dojo.query(node).prev()[0].style.display="none";});

嗯,prev() 不起作用的原因是因为 forEach() 回调传递了一个 DOM 节点,而不是 NodeList (这实际上是某种具有效用函数的数组,例如 prev()

要使其正常工作,您必须再次将其包装在 dojo.query() 中,例如 dojo.query(node).prev()。另一个问题是,由于节点列表和节点之间的区别,您不能直接在其上应用 style.display,但您必须使用适当的 NodeList 函数,因为示例:

dojo.query(node).prev().style('display', 'none');

或者您必须检索 DOM 节点本身,例如:

dojo.query(node).prev()[0].style.display = 'none';

此外,请注意 prev() API 是 dojo/NodeList-traverse 的一部分,style() API 是 dojo/NodeList-dom 的一部分。您必须包含这两个模块才能使其正常工作。

可在 JSFiddle.

上找到工作示例