我有一些类似以下的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()并不存在。任何人都可以帮我解决这个问题吗?
答案 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"; })