2012-02-17 47 views
1

我對此感到沮喪。我想要編寫的是一個簡單的xml讀取器,它允許用戶選擇顯示或隱藏哪些數據。通過在foreach循環中單擊來顯示/隱藏xml內容

此代碼首先顯示xml文件的標題,當用戶單擊標題時,日期和時間應顯示在標題下。

問題是無論點擊哪個標題,它只顯示/隱藏第一個標題下的第一個標題的日期時間。

<script type="text/javascript"> 
    function toggle(element) { 
    document.getElementById(element).style.display =  
(document.getElementById(element).style.display == "none") ? "" : "none"; 
} 
</script> 

<?php 
$doc = simplexml_load_file('data.xml'); 
if($doc == TRUE){ 
foreach($doc->channel->item as $child){ 
    $title = $child->title; 
    echo '<table>'; 
    echo '<tr>'; 
    echo '<td><a href="javascript:toggle(\'shit\')">'.$title.'</a></td></tr>'; 
    echo '<tr id="shit" style="display: none;">'; 
    echo '<td>'; 
    echo date("d.m.Y H:i", strtotime($child->pubDate)); 
    echo '</td></tr>'; 
    echo '</table>'; 
} 
} 
?> 

回答

0

正如其他人所說,你需要每個元素都有一個唯一的id(你想得到一個引用)。 最簡單的方法是隻一個計數器添加到您選擇的名稱,在這種情況下,「狗屎」,這裏是修改後的版本:

<script type="text/javascript"> 
    function toggle(num) { 
    document.getElementById("shit" + num).style.display =  
(document.getElementById("shit" + num).style.display == "none") ? "" : "none"; 
} 
</script> 

<?php 
$doc = simplexml_load_file('data.xml'); 
if($doc == TRUE){ 
$1 = 0; 
foreach($doc->channel->item as $child){ 
    $title = $child->title; 
    echo '<table>'; 
    echo '<tr>'; 
    echo '<td><a href="javascript:toggle(\''.$i.'\')">'.$title.'</a></td></tr>'; 
    echo '<tr id="shit'.$i.'" style="display: none;">'; 
    echo '<td>'; 
    echo date("d.m.Y H:i", strtotime($child->pubDate)); 
    echo '</td></tr>'; 
    echo '</table>'; 
} 
} 
?> 
+0

與代碼一起的一些評論將是很好。 – 2012-02-17 17:00:34

+0

謝謝。這幾乎沒有一些修復工作。 – user1173225 2012-02-17 18:07:07

+0

那麼如何將它標記爲正確答案? – 2012-02-17 18:08:32

0

這是因爲... ids應該是頁面上唯一的,因此

document.getElementById(element) 

總是返回第一個匹配的元素,即使有在頁面

0

你相同ID的多個元素將不得不爲每個想要顯示/隱藏的TR分配一個不同的(唯一的)ID。現在你輸出許多具有相同ID的「TR」。

您將不得不修改您的JavaScript以使用正確的ID。