Javascript if else 问题移动 Jquery 切换菜单

发布于 2024-12-11 23:14:31 字数 388 浏览 0 评论 0原文

我正在尝试为移动网站制作 jquery 切换菜单。

我成功地在切换时和非

当前版本时创建了一个带有 + 和 - 的切换菜单: http://jsfiddle.net/9Dvrr/7/

现在我正在尝试创建一个显示“>”的 if else 语句当没有孩子的时候。

实验http://jsfiddle.net/9Dvrr/6/

问题是我似乎能弄清楚......

提前致谢,

瑞克

I'm trying to make a jquery toggle menu for a mobile website.

I've managed to create a toggle menu with + and - when toggled and when not

Current version: http://jsfiddle.net/9Dvrr/7/

Now i'm trying to create a if else statement fot displaying a ">" when there are no children.

Experiment: http://jsfiddle.net/9Dvrr/6/

Problem is that i just can seem to figure it out..

Thanks in advance,

Rick

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

提赋 2024-12-18 23:14:31

在检查它是否有子项时,您需要检查 length 属性。否则,您要检查的只是结果是否为非空...即使选择器不匹配,它也将始终为非空,因为它将返回 jQuery。它将是空的,不包含任何元素,但仍然是一个对象,因此不为空。

if (element.has('ul').children('a').length > 0) {
    element.prepend("<span>+ </span>");

You need to check the length property when checking if it has children. Otherwise, all you're checking is if the result is non-null or not...and it will always be non-null even if the selector doesn't match because it will return jQuery. It will be empty of any elements, but an object nonetheless and thus non-null.

if (element.has('ul').children('a').length > 0) {
    element.prepend("<span>+ </span>");
默嘫て 2024-12-18 23:14:31

下面的代码将实现您想要的功能,但它肯定需要进行一些重构。它主要是向您展示如何简单地实现它:

$('#menu-mobiel ul').hide();

$.each($('#menu-mobiel li'), function(i, value) {
    var $this = $(this);

    if($this.find('ul a').length > 0) {
        $this.find('a').append("<span>+ </span>")
        .addClass('plus')
        .click(function() {
            togglePlus($(this));
            $(this).next('.sub-menu').slideToggle('normal');
        });
    }
    else
    {
        $this.find('a').append("<span>> </span>");
    }
})

function togglePlus(element) {
    element = $(element);
    if (element.hasClass('plus')) {
        element.removeClass('plus').addClass('minus');
        element.children('span').text('- ');
    } else {
        element.removeClass('minus').addClass('plus');
        element.children('span').text('+ ');
    }
}

This code below will do what you want, but it could definitely use a little refactor. It's mostly to show you how you can achieve it simply :

$('#menu-mobiel ul').hide();

$.each($('#menu-mobiel li'), function(i, value) {
    var $this = $(this);

    if($this.find('ul a').length > 0) {
        $this.find('a').append("<span>+ </span>")
        .addClass('plus')
        .click(function() {
            togglePlus($(this));
            $(this).next('.sub-menu').slideToggle('normal');
        });
    }
    else
    {
        $this.find('a').append("<span>> </span>");
    }
})

function togglePlus(element) {
    element = $(element);
    if (element.hasClass('plus')) {
        element.removeClass('plus').addClass('minus');
        element.children('span').text('- ');
    } else {
        element.removeClass('minus').addClass('plus');
        element.children('span').text('+ ');
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文