2015-10-23 61 views
0

有一些HTML像下面我如何獲得一個節點中的foreach與道場

<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隱藏-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()不存在。任何人都可以幫我解決這個問題嗎?

回答

1

好了,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上找到一個工作示例。

+0

謝謝。現在我知道它爲什麼不起作用。感謝徹底的迴應。 – Dalupus

0

你有沒有試過自己掛在它上面?

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

我不想隱藏以前的foreach意義上的前一個。我試圖隱藏它上面的那一行。因此,如果我有row1,row2,row3,row4,我的選擇器只抓取第2行和第4行,但我還需要隱藏1和3之上的行。 – Dalupus

0

這將幫助你:

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

這只是選擇RowName-Hide-YES行。我需要隱藏它之前的行。 – Dalupus

+0

是否要隱藏包含「.RowName-Hide-YES」類和前一類的行。如果這是你的選擇,那麼你可以從父表中遍歷表,並且你必須找到所有包含你的慾望類的孩子,然後從這裏你也隱藏prev()tr。 或者你想隱藏所有的行? –

1

我想通了這一點。我需要做dojo.query再次在foreach內部使用分組

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