javascript - 不使用 data-id 标签的 Jquery 菜单

标签 javascript jquery html menu

我创建了一个非常漂亮的 jQuery 菜单,当您选择顶部的每个选项卡时,它会加载不同的内容。

但是,我无法再使用代码中使用的“data-id”标签,因为这显然会干扰 HTML 净化器。我知道有很多反对这个主题的论点,并且应该允许您启用某些标签,但最终我无法使用这些标签。

因此,我希望得到一些有关如何重组此菜单的意见,同时仍保持其外观完整,但不使用 data-id 标签。

我还注意到,当您在 jsfiddle 中运行此代码时,它会快速加载所有 4 个菜单项的内容,然后仅显示菜单项 1 的内容(即,它会显示一个列表 - 菜单内容 1、菜单项内容2、菜单项内容3和菜单项内容4)。

提前致谢

https://jsfiddle.net/m83ntmfz/

HTML

<div>
   <ul id="listingmenu">
   <li class="current"><a href="#!" data-id="div1">MENU ITEM 1</a></li>
   <li><a href="#!" data-id="div2">MENU ITEM 2</a></li>
   <li><a href="#!" data-id="div3">MENU ITEM 3</a></li>
   <li><a href="#!" data-id="div4">MENU ITEM 4</a></li>
   </ul><br><br>
   <div class="pbox" id="div1">content for menu item 1</div>
   <div class="pbox" id="div2">content for menu item 2</div>
   <div class="pbox" id="div3">content for menu item 3</div>
   <div class="pbox" id="div4">content for menu item 4</div>
</div>

CSS

ul#listingmenu {
    margin: 0;
    padding: 0;
    list-style-type: none;
    text-align: center;
}

    ul#listingmenu li {
        position: relative;
        float: left;
        border-bottom: 3px solid #272e3b;
        margin-right: 10px;
        padding-right: 0px;
        padding-bottom: 5px;
        display: inline-block;
    }

    ul#listingmenu .current {
        border-bottom: 3px solid #fe8f25;
    }

    ul#listingmenu li:hover {
        border-bottom: 3px solid #fe8f25;
    }

    ul#listingmenu li a {
        padding: 2px 2px;
        text-decoration: none;
        font: 12px Avenir, Arial, "Times New Roman", Times, serif;
        color: #272e3b;
    }

        ul#listingmenu li a:hover {
            color: #fe8f25;
            border: none;

JavaScript

$(document).ready(function () {
    $('#listingmenu').on('click', 'a', function () {
              $('.current').not($(this).closest('li').addClass('current')).removeClass('current');
        // fade out all open subcontents
        $('.pbox:visible').hide(600);
        // fade in new selected subcontent
        $('.pbox[id=' + $(this).attr('data-id') + ']').show(600);
    }).find('a:first').click();
});

最佳答案

<强> Demo

您可以使用类似于 Twitter 引导选项卡中的策略。我的意思是,如果您不想使用数据 ID,则可以使用元素索引。在这种情况下,链接和相关内容的顺序必须与您的情况相同。看下面的代码你就很容易理解了。

HTML

<div>
    <ul id="listingmenu">
        <li class="current"><a href="#!">MENU ITEM 1</a></li>
        <li><a href="#!">MENU ITEM 2</a></li>
        <li><a href="#!">MENU ITEM 3</a></li>
        <li><a href="#!">MENU ITEM 4</a></li>
    </ul>
    <br>
    <br>
    <div class="pbox">content for menu item 1</div>
    <div class="pbox">content for menu item 2</div>
    <div class="pbox">content for menu item 3</div>
    <div class="pbox">content for menu item 4</div>
</div>

JS

$(document).ready(function() {
        $('#listingmenu li').on('click', function() {
            var currentIndex = $(this).index();
            $('.current').not($(this).closest('li').addClass('current')).removeClass('current');
            // fade out all open subcontents
            $('.pbox:visible').hide(600);
            // fade in new selected subcontent
    
    
            $('.pbox:eq(' + currentIndex + ')').show(600);
        })
        $('#listingmenu li').first().click();
    });

关于javascript - 不使用 data-id 标签的 Jquery 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32717071/

相关文章:

javascript - Jquery.load "cannot get"

android - 如何确定下载的 HTML 源代码来自特定网站?

jquery - 如何在 AngularJS 中动态分配过滤器

Javascript - 如果数字对尚不存在,则生成随机数字对

jquery - 有没有办法以编程方式确定图像链接是坏的?

html - 在父级上方可视化地创建子菜单/下拉菜单

javascript - 动态创建的 iframe 内容为空

javascript - Chrome 扩展消息在后台和内容脚本之间传递

javascript - 如何计算 JavaScript 中对象观察者的长度?

javascript - 使用 Javascript 从 HTML 中提取 URL 并在函数中使用它