试试这个:
$(function() {
$(window).resize(function() {
if (window.innerWidth <= 480 && !$('#menu').length) {
$('#menu-primary-navigation').wrapInner('<li id="menu" class="dd"><ul class="sub-menu"></ul></li>');
$('#menu').prepend('<a id="premenu" href="#">Menu</a>');
} else if (window.innerWidth > 480 && $('#menu').length) {
$('#menu').replaceWith($('#menu > ul').children());
$('#premenu').remove();
}
}).resize();
});
注意我加&& !$('#menu').length
。这只是添加菜单,如果它不存在。您也可以将第二个if
作为else
,因为它们是互斥的。 (当你改变>= 480
到> 480
)
演示代码:http://jsfiddle.net/jtbowden/WzweR/
演示(全屏):http://jsfiddle.net/jtbowden/WzweR/embedded/result/
另外,我不认为你可以有效的标记结束。要么你在ul
中包装非li
项,要么在ul
中加入a
......但是也许我没有想过你的标记是什么样的。我只是猜测。如果窗口太窄,我认为你正在崩溃菜单结构的一部分。
更新:
看到你的代码,一对夫妇的变化之后。首先,我错过了我的replaceWith($('#menu > ul').children());
中的>
。这有很大的不同,因为你不想把所有的ul
都取消。其次,要添加一些东西到你的链接,你需要在调整大小调用来完成:
$(window).resize(function() {
if (window.innerWidth <= 480 && !$('#menu').length) {
$('#menu-primary-navigation').wrapInner('<li id="menu" class="dd"><ul class="sub-menu"></ul></li>');
$('#menu').prepend('<a id="premenu" href="#">Menu</a>');
$('#premenu').prepend("<span class='arrow-down'></span>"); // Dropdown Arrows
$('#premenu').next().addClass('navhidden'); // Optional
} else if (window.innerWidth > 480 && $('#menu').length) {
console.log("test");
$('#menu').replaceWith($('#menu > ul').children());
$('#premenu').remove();
}
}).resize();
您还需要将您的.click()
处理器更改为.on()
通话,因为正在动态创建的元素。当他们被删除时,任何点击处理程序被删除。如果您使用.on()
你基本处理程序附加到DOM树和过滤元件上更高的元素,你想回应:
$('#access').on('click', 'li.dd a', function() {
// ... do stuff here
// This basically says, whenever something in #access is clicked,
// check if it is a `li.dd a` link, and if so, do this stuff
});
演示代码:http://jsfiddle.net/jtbowden/9fHPA/7/
演示(全屏):http://jsfiddle.net/jtbowden/9fHPA/7/embedded/result/
你如何达到目标? – 2012-03-19 23:29:18