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