我有一个foreach
循环:
<ul>
<?php
foreach ($pages['results'] as $row => $value) {
echo '<li>' . $row . '<ul>';
foreach ($value as $x => $y) {
echo '<li><a href="#' . str_replace(" ", "", strtolower($y[2])) . '" title="' . $x . '">' . $x . '</a></li>';
}
echo '</li></ul>';
}
?>
</ul>
而且,这在Chrome,Firefox,Safari,IE 9中运行良好,但在IE 8中则不行。
CSS是正确的,但</ul>
的第一行之后,foreach
之外的最后foreach
关闭。我希望这是有道理的,为什么IE 8会这样做?
这是吐出的HTML:
答案 0 :(得分:6)
替换最终的回声,你需要关闭ul然后关闭li
echo '</ul></li>';
答案 1 :(得分:0)
虽然修复错误的解决方案很明显,但它没有回答这个问题。我们需要知道什么浏览器必须解析无效的HTML代码。它不会向我们显示错误,但它将使用一些算法来克服错误并在dom树中插入正确的元素。这个名称是browsers error tolerance
,它在浏览器之间略有不同。更重要的是,它可能会随着浏览器升级而改变,所以你有答案:IE8浏览器的容错可能没有错,但与其他浏览器相比,如果 li找到了带有开始标签的end-tag省略 强>
开发人员应阅读this article。
答案 2 :(得分:-1)
尝试像这样交换结束ul和li:
<ul>
<?php
foreach ($pages['results'] as $row => $value) {
echo '<li>' . $row . '<ul>';
foreach ($value as $x => $y) {
echo '<li><a href="#' . str_replace(" ", "", strtolower($y[2])) . '" title="' . $x . '">' . $x . '</a></li>';
}
echo '</ul></li>'; //just swap closing elements
}
?>
</ul>