javascript - 如果使用 data-id 为 null,则不显示

标签 javascript jquery html css

我有一个菜单,其中列出了在另一个列表中显示内容的元素。

菜单

<ul id="gallery-list" style="display: none;">
        <li class="close"></li>
        <li data-id="9425"><strong>item 1</strong></li>
        <li data-id="9426"><strong>item 2</strong></li>
        <li data-id="9488"><strong>item 3</strong></li>
        <li data-id="9489"><strong>item 4</strong></li>
        <li data-id="9495"><strong>item 5</strong></li>
        <li data-id="9427"><strong>item 6</strong></li>
</ul>

内容:

<ul id="gallery-container">
        <li data-id="9425">
            <h3 style="display: none;">Item 1</h3>
            <div class="content">Content here</div>
        </li>
        <li data-id="9426">
            <h3 style="display: none;">Item 2</h3>
        </li>
        <li data-id="9488">
            <h3 style="display: none;">Item 3</h3>
        </li>
        <li data-id="9489">
            <h3 style="display: none;">Item 4</h3>
        </li>
        <li data-id="9495">
            <h3 style="display: none;">Item 5</h3>
            <div class="content">Content here</div>
        </li>
        <li data-id="9427">
            <h3 style="display: none;">Item 6</h3>
            <div class="content">Content here</div>
        </li>
</ul>

li的内容中有些有.content。如何使用其中的数据 ID 隐藏菜单部分中的元素?基本上菜单中的元素只有在有 .content

时才会显示

MENU 的输出应该是这样的。

<ul id="gallery-list" style="display: none;">
        <li class="close"></li>
        <li data-id="9425"><strong>item 1</strong></li>
        <li data-id="9495"><strong>item 5</strong></li>
        <li data-id="9427"><strong>item 6</strong></li>
</ul>

或者这也应该没问题。

<ul id="gallery-list" style="display: none;">
        <li class="close"></li>
        <li data-id="9425"><strong>item 1</strong></li>
        <li data-id="9425" style="display:none;"><strong>item 2</strong></li>
        <li data-id="9425" style="display:none;"><strong>item 3</strong></li>
        <li data-id="9425" style="display:none;"><strong>item 4</strong></li>
        <li data-id="9495"><strong>item 5</strong></li>
        <li data-id="9427"><strong>item 6</strong></li>
</ul>

请注意,内容中的 Item 始终是 display:none; onload 触发器。

同样使用这个脚本:

    $("#gallery-list li").click(function() {
        var id = $(this).data('id');
            $("#gallery-container").find('li').each(function() {
            $(this).find('.content').toggle($(this).data('id') === id);
            $(this).find('h3').toggle($(this).data('id') === id);
        });
    });
    window.onload = function () {
        $("#gallery-container li .content").css("display", "none");
        $("#gallery-container li h3").css("display","none");
        $("#gallery-container li p").css("display","none");
    }
    $('.gallery-menu h3, #gallery-list li').click(function(){
        $("#gallery-list, .gallery-menu h3").toggle();
    });

这控制列表的内容同时激活菜单。

最佳答案

我的第一个想法:
循环内容列表项,当里面没有可用的 .content 时,删除相关的菜单项。

$(function() {
    $("#gallery-container li[data-id]").each(function() {
        if( $(".content", this).length == 0 ) {
            $("#gallery-list li[data-id=" + $(this).data("id") + "]").remove();
        }
    });
});

正如@XerenNarcy 在评论中注意到的,您甚至可以使用 not()has() 组合选择器:

$(function() {
    $("#gallery-container li[data-id]:not(:has(.content))").each(function() {
        $("#gallery-list li[data-id=" + $(this).data("id") + "]").remove();
    });
});

您甚至可以使用 hide() 而不是 remove()

Working example.

关于javascript - 如果使用 data-id 为 null,则不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38651489/

相关文章:

javascript - 如何在 Bacon.js 中获取 Ajax 调用的状态?

javascript - jQuery:有一种更有效的方法可以做到这一点,不是吗?

jQuery UI selectmenu 丢失 title 属性

html - 如何在文本区域中显示 <html>

javascript - 有没有办法在没有await关键字的情况下调用sleep()?

javascript - 我将如何清理这个字符串? (最好在 JQuery 中)?

javascript - 将来使用闭包来执行函数?

jquery - 按id升序加载图片

javascript - 隐藏一个 div 或动态附加它

html - 从 Java servlet 为 HTML5 音频控件提供音频数据