我有一个这样的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 是正确的,但foreach
之外的最后一</ul>
在foreach
的第一行之后关闭。我希望这是有道理的,为什么IE 8要这样做?
这是吐出的 HTML:
新家社区
- 安卡
- 斯特
- 安卡斯特
格伦 - 比姆斯维尔
- 发现
- 宾布鲁克
- 集市决赛
- 帕克赛德村
- 科林伍德
- 萨米特海岸
- 汉密尔顿
- 格林希尔 格伦 派
- 拉蒙 山谷公园
- 谢尔曼奥克斯
- 基奇纳
- 杜恩克里 克
- 维多利亚
公园 - 普通 斯托尼克里克果
- 园公园
替换最后的回显,你需要关闭ul,然后关闭
liecho '</ul></li>';
尽管修复错误的解决方案很明显,但它并没有回答这个问题。我们需要知道浏览器在必须解析无效的 html 代码时会做什么。它不会向我们显示错误,但它将使用一些算法来克服错误并在 dom 树中插入正确的元素。它的名称是browsers error tolerance
,并且在浏览器之间略有不同。更重要的是,它可能会随着浏览器升级而改变,所以有你的答案:IE8浏览器容错可能没有错,但与其他浏览器相比不同,如果发现li结束标签省略了开始标签
开发人员应阅读本文。
尝试像这样交换关闭 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>