2013-07-11 76 views
0

我正在循環一個列表並顯示列表中的每個項目。需要使用forEach循環兩次與唯一ID

每個項目都可以有一個列表,我需要循環再次顯示。以下是我使用的代碼,

<c:forEach var="i" items="${someThing.uList}"> 
    <tr> 
     <td><input type="radio" name="thelist" value="${i.id}"/>${i.number}</td> 
     <td>${i.name}</td> 
     <td>${i.class}</td> 
     <td>${i.date}</td> 
     <c:if test="${not empty i.childs}"> 
     <td><input type="button" value="+" id="link" onclick="showChilds('child');"/></td> 
     </c:if> 
    </tr> 
    <c:if test="${not empty i.childLoads}"> 
     <tr id="child"> 
     <c:forEach var="c" items="${i.childLoads}"> 
      <td><input type="checkbox" name="thelists" value="${c.id}"/>${c.number}</td> 
      <td>${i.name}</td> 
      <td>${i.class}</td> 
      <td>${i.date}</td> 
     </c:forEach> 
     </tr> 
    </c:if> 
</c:forEach> 

頁面加載時,我想隱藏的第二個循環,給id作爲孩子,但只有第一個孩子是隱藏所有其他仍然呈現。如何隱藏所有的孩子?我可以創建一個唯一的ID,但我怎麼能通過JavaScript來隱藏或顯示取決於用戶點擊事件?

+2

你需要給''元素** **類,不是** ** ID - ID值必須在頁面上獨一無二的,而且你的代碼給了很多元素相同的id。 – Pointy

回答

1

你可以給這個tr兒童的className而不是child的id。然後,您可以使用一個支持document.getElementsByClassName('child')的javaScript函數,並使用for循環將這些元素設置爲隱藏。

<!DOCTYPE html> 
<html> 
<head> 
<script> 
function load() 
{ 
var elements = document.getElementsByClassName('child'); 
for(var i=0; i<elements.length; i++){ 
elements[i].style.display='none'; 
} 
} 
</script> 
</head> 
<body onload="load()"> 
<table> 
    <tr>Trs wont appear below</tr> 
    <tr class="child"><td>Child1</td></tr> 
    <tr class="child"><td>Child2</td></tr> 
<tr class="child"><td>Child3</td></tr> 
<tr class="child"><td>Child4</td></tr> 
</table> 
</body> 
</html> 

這裏是小提琴 http://jsfiddle.net/nMVrX/2/

要啓用隱藏和顯示,迭代器我添加到類名

即您的按鈕會像

<td><input type="button" value="+" id="link" onclick="showChilds('child${i}');"/></td> 

和你tr標籤看起來像這樣

<tr class="child${i}"> 

指本作getElementsByClassName方法適用於IE https://stackoverflow.com/a/7410966/1714501

+0

我可以隱藏,因爲你說..但是,如果需要顯示什麼 – user1609085

+0

請參閱編輯 – RegisteredUser

+0

getElementByClassName不支持在IE中,所以我不能去那! – user1609085