jQuery与可折叠列表冲突

jQuery Conflict with Collapsible List

本文关键字:冲突 列表 可折叠 jQuery      更新时间:2024-05-07

我目前正在使用一个小的jQuery脚本,包括infra,以使collapsible-list类的列表可折叠/可扩展。默认情况下,脚本会折叠列表(还有一点CSS,也包括infra,让访问者很容易注意到这一点),然后在访问者单击可扩展元素时展开它。

以下是脚本:

jQuery

jQuery(function($) {
function prepareList() {
    $('.collapsible-list').find('li:has(ul)')
        .click( function(event) {
            if (this == event.target) {
                $(this).toggleClass('collapsible-list-expanded');
                $(this).children('ul').toggle('medium');
            }
            return false;
        })
        .addClass('collapsible-list-collapsed')
        .children('ul').hide();
};
$(document).ready( function() {
    prepareList()
});
});

CSS

/* Collapsible Lists */
.collapsible-list, .collapsible-list ul, .collapsible-list li {
    list-style: none;
}
.collapsible-list .collapsible-list-collapsed:before {
    content: "+ ";
    font-weight: bold;
    color: #00AA00;
}
.collapsible-list .collapsible-list-expanded:before {
    content: "- ";
    font-weight: bold;
    color: #AA0000;
}

CSS是为了完整性而包含的,它的功能完全符合预期。问题在于jQuery(可能还有页面上的其他脚本,我似乎无法将其隔离)。

脚本确实折叠了给定collapsible-list类的任何列表中除顶层部分外的所有部分,但这就是适当功能的结束。现在,脚本在我的测试环境中(以及在JSFiddle中)的行为与预期一致;然而,一旦脚本在我的网站上实现,列表就会折叠,单击即可展开,,而不是在单击后保持展开(应该如此),它们会立即再次折叠。很明显,这会使脚本在实现后变得毫无用处,因为collapsible-list类调用它的任何列表都会使访问者无法使用。

这里有一个链接,指向当前实现它的页面:http://wpmudev.docs.omnifora.com/docs/plugins/wpmu-dev-dashboard/.现在,我确信某个地方存在脚本冲突,但我似乎无法弄清楚是什么脚本冲突。

附加信息

这个网站使用Bootstrap,我怀疑这可能是冲突的根源。

更新我已经缩小了潜在冲突的范围,Bootstrap似乎不是罪魁祸首。这是一个JSFiddle,其列表在两个不同的引导面板设置(嵌套在panel-bodypanel中)中的行为与预期一致:在此处输入链接描述。

我现在已经设法使列表工作,除了关于格式化。jQuery冲突似乎是由一个脚本调用另一个脚本的方式中的一个轻微错误引起的,这导致collapsible-list.js文件被加载了两次。这是一个正在工作的JSFiddle:在此处输入链接描述

在单击函数中添加.toggleClass('collapsible-list-collapsed');可能会起作用。

在处理了几个小时之后,我能够解决冲突:

  1. 其中一个脚本引用的格式不正确,这导致了对collapsible-list.js的两次调用,这导致意外的立即收缩扩展行为。

  2. 最初的脚本只使用expandedcollapsed作为类,它们与另一组规则交互并导致意外行为;修改后的脚本使用了更具体的类,从而避免了此类冲突。

然后修改CSS:

  1. 有人认为将padding: 0;放在主题的主CSS文件中的ulli元素上是明智的;显然,这很容易被.collapsible-list的更具体的规则所覆盖

结果是,该页面现在按预期运行:http://wpmudev.docs.omnifora.com/docs/plugins/wpmu-dev-dashboard/.