jQuery手风琴:如何只调用一次

前端开发 2026-07-12

我有很多手风琴元素是通过AJAX函数添加的。
当通过AJAX创建元素时,我会调用该函数:

$( ".accordion" ).accordion({ active: false, collapsible: true, heightStyle: "content" });

但如果在其他元素仍在加载时打开一个手风琴元素,刚才打开的第一个元素在再次调用前一个命令时就会被关闭。

如何让 $( ".accordion" ).accordion() 即使对于后续通过AJAX创建的元素也只调用一次?

解决方案

以某种方式标记该元素,表示它已经是一个已激活的手风琴。最合适的做法是通过添加自定义属性,因为这是最符合语义的做法。不过,你也可以添加一个类。

然后只查找未被标记的元素

对于名为 data-accordion-initialised 的自定义属性,代码将会是:

// find all elements not yet initialised
$( ".accordion:not([data-accordion-initialised])" )
    // add the attribute
    .attr( "data-accordion-initialised", "yes" )
    // initialise the accordion
    .accordion({ active: false, collapsible: true, heightStyle: "content" });

使用自定义类则为:

// find all elements not yet initialised
$( ".accordion:not(.accordion-initialised)" )
    // add the class
    .addClass( "accordion-initialised" )
    // initialise the accordion
    .accordion({ active: false, collapsible: true, heightStyle: "content" });
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章