Javascript 使用覆盖加载页面时是否显示所有隐藏元素?

Javascript 使用覆盖加载页面时是否显示所有隐藏元素?,javascript,jquery,toggle,Javascript,Jquery,Toggle,我有一个页面,强制一些JS加载到我需要覆盖的页面上。我可以加载一个单独的JS文件来实现这一点。我想让页面在页面上的折叠下方为任何。执行显示。我想最好的说法是,当页面加载时,我希望页面上所有“更多”的内容都被扩展,而不是让一个人点击more来查看所有这些页面的折叠下面是什么。 这是我需要覆盖的JS,我无法更改它,因为它是由应用程序自动加载的。隐藏的列表可能不止一个,我不确定这会让事情变得多么困难 function MoreFacets($more_facets_div) { this.$m

我有一个页面,强制一些JS加载到我需要覆盖的页面上。我可以加载一个单独的JS文件来实现这一点。我想让页面在页面上的折叠下方为任何
。执行
显示。我想最好的说法是,当页面加载时,我希望页面上所有“更多”的内容都被扩展,而不是让一个人点击
more
来查看所有这些页面的折叠下面是什么。 这是我需要覆盖的JS,我无法更改它,因为它是由应用程序自动加载的。隐藏的列表可能不止一个,我不确定这会让事情变得多么困难

function MoreFacets($more_facets_div) {
    this.$more_facets_div = $more_facets_div;

    this.bind_events();
};

MoreFacets.prototype.bind_events = function() {
    var self = this;

    self.$more_facets_div.find('.more').on('click', function (e) {
        $(this).siblings('.below-the-fold').show();
        $(this).hide();
    });

    self.$more_facets_div.find('.less').on('click', function (e) {
        $(this).parent().hide();
        $(this).parent().parent().find('.more').show();
    });

};

$(function() {
    $('.more-facets').each(function() {
        new MoreFacets($(this));
    });
});
它加载到页面上,HTML如下所示:

<h3>Additional filters: </h3>
<dl id="facets">
    <dt>Collecting Area</dt>
      <dd> Here's Something in the list</dd>
      <dd> Here's the last in the list</dd>
        <div class="more-facets">
          <span class="more btn">&or; more</span>
          <div class="below-the-fold">
      <dd>Something That's hidden is here</dd>
      <dd>Something more in this hidden list</dd>
附加过滤器:
收集区
清单上有一些东西
这是名单上的最后一个
&或;更多
这里有隐藏的东西
在这个隐藏列表中还有更多的东西
因此,当
&或;更多的
是在折叠下面的其他页面出现时单击的,这就是我希望在页面加载时加载的内容。页面上通常会有一些类似的不同列表

所以我想我需要做的是在页面加载时为所有列表运行
('.down the fold').show()

更新注释以澄清:当页面现在加载时,它们都是隐藏的。我想他们都显示时,页面加载,所以没有人必须点击任何东西都显示出来


另一个注释基于下面的另一个问题。。。它被加载到一个单独的文件中,我可以在那个文件之前加载我的文件。我知道我可以覆盖页面上的其他JS,所以我假设我也可以覆盖它

根据您上次的编辑,听起来您已经找到了解决问题的最快方法

请注意,这仅在脚本未异步加载时有效,但如果您可以控制脚本的加载顺序,则可以在问题脚本和jQuery之间插入脚本

您的脚本可以很简单,只需将其使用的函数重新定义为以下内容:

MoreFacets.prototype.bind_events = function() {
    var self = this;

    //Autostart in our open state without completely disabling the functionality
    self.$more_facets_div.find('.below-the-fold').show();
    self.$more_facets_div.find('.more').hide();

    self.$more_facets_div.find('.more').on('click', function (e) {
        $(this).siblings('.below-the-fold').show();
        $(this).hide();
    });

    self.$more_facets_div.find('.less').on('click', function (e) {
        $(this).parent().hide();
        $(this).parent().parent().find('.more').show();
    });
};
现在,如果您不能控制脚本加载,这将不起作用,但即使在这种情况下,您也可能有希望,因为jQuery中的文档就绪函数是按照它们注册的顺序调用的,因此如果您不能真正控制脚本的位置,您可以使用另一种方法

$(function() {
    $('.more-facets').each(function() {
        $(this).find('.below-the-fold').show();
        $(this).find('.more').hide();
    });
});

第一种方法会更简洁,但第二种方法是在限制性更强的情况下使用的,这两种方法都可以在不完全删除功能的情况下达到您想要的效果,只需更改加载时的默认状态。

那么,您希望折叠下方带有
的所有div都在正确加载页面时显示吗?它们已经在页面上了,但是被隐藏了?@RomainB。没错,现在加载页面时,它们都是隐藏的。我希望它们都能显示出来。你的JavaScript是在你试图对抗的脚本之前还是之后加载的,还是内联在页面上?@StephenKennedy它加载在一个单独的文件中,我可以在这个文件之前加载我的文件。我知道我可以覆盖页面上的其他JS,所以我想我也可以覆盖它。非常感谢!!我选择了第二个,只是因为它能工作,而且小得多。