我对此感到沮丧。我试图编写的是一个简单的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>';
}
}
?>
正如其他人所说,每个元素需要有一个唯一的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>';
}
}
?>
这是因为ids
在页面上应该是唯一的,因此
document.getElementById(element)
始终返回第一个匹配元素,即使页面中有更多相同id的元素
您必须为每个想要显示/隐藏的TR分配一个不同的(唯一的)ID。现在你正在输出许多具有相同id"大便"的TR。
您还必须修改您的JavaScript才能使用正确的ID。