我有一个“菜单栏”(因为没有更好的术语),它基本上是 980 像素的固定宽度ul
。这些li
元素在页面加载时填充,并包含一个图像、一个跨度和一个分隔符(用于 next li
)。
如果元素太多li
,它们会溢出到下一行。我想通过在填充列表后运行一些 JS/jquery 来为这样的事件做准备,以将所有溢出元素移动到另一个 div 中,这本质上是一个带有元素的 CSS 悬停菜单(它会说'.. .查看更多'或类似)。
我最初的方法是在填充菜单后检查菜单的总宽度是否超过某个数字,如果是,则将最后一个元素附加到新 div 以进行溢出。这个函数要么用一个变量循环检查菜单的宽度,要么递归地调用自己,无论哪一个。我得到了使用if
语句的基本功能,但它是一个单一的迭代测试 - 最后一个元素成功移动到 div。不幸的是,当我尝试迭代它(循环或递归)时,浏览器似乎进入了 js 中的无限循环,并且从未正确加载页面。
我当前尝试的一个版本如下所示:
/**code for populating etc happens here ... then calls trimList(); */
function trimList(){
var menuWidth = $('#menu').width();
if(menuWidth > 700){
$('#menu li:last-child').appendTo('#overflowList');
trimList();
}
}
使用这个版本或while
循环浏览器最终会崩溃,但我不知道为什么。我敢肯定这是显而易见的。
我想修复我当前的实现,或者以其他方式进行(也许 - 如果宽度更长,抓住所有超出该宽度的元素,并将它们扔到 div 中。一次,而不是迭代。但是我不确定抓住第一个违规(边界推动)元素的最佳方法是什么。)
我确定这很简单,我现在只是在努力找出导致问题的原因。
谢谢
编辑:见下文 - 修复了我的问题