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

时间:2015-10-23 15:00:01

标签: javascript 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>

我需要选择RowName-Hide-YES的所有行并将它们与前一行一起隐藏。隐藏班级的人很容易

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()并不存在。任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

我想出来了。我需要在forEach中再次执行dojo.query以使用prev

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

答案 1 :(得分:1)

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

要使其工作,您必须再次将其包含在dojo.query()内,例如dojo.query(node).prev()。另一个问题是,由于节点列表和节点之间存在差异,您是否可以直接在其上应用style.display,但您必须使用相应的NodeList } function,例如:

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找到一个工作示例。

答案 2 :(得分:0)

你是否尝试过自己挂在上面?

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

答案 3 :(得分:0)

这将对您有所帮助:

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