如何使用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.
上找到工作示例
我有一些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.
上找到工作示例