在我的页面上,h3标题下的大多数p部分都是隐藏的。如果你点击它们,下面的内容就会显示出来。打开页面时,只显示第一部分。我使用jQuery隐藏这些部分,如下所示:
jQuery("#area h3:first").addClass("active");
jQuery("#area p:not(:first)").hide();
但是,如果在另一个部分中有一个锚,并且用户在url的末尾使用#链接到它,那该怎么办呢?现在,它跳到隐藏部分,这是令人恼火的,因为文本没有显示。我不想隐藏这个部分,当url中的锚点在这个部分中,例如http://domain.com/page.php#anchor_in_section_3。
如何防止该部分隐藏/折叠?
详细信息:在回答1之后,我发现了两个问题:如果只在一行代码之后使用.hide和.show,这些部分将保持隐藏状态。这对jQuery来说似乎太快了。另一个问题是,使用答案1中描述的解决方案,如果锚点不在子标签中,jQuery只能找到锚点。
这比我想象的要难:)
因此,用文字描述的解决方案是,除了第一个和包含锚标记的部分之外的所有部分都应该隐藏。锚点可以在节的任何(子)-tag中。
我花了2个小时把它转到jQuery上,但是我的jQuery知识很差,没有成功。
发布于 2010-09-03 23:31:22
要从URL获取锚点的名称,请使用以下行:
var anchorName = document.location.hash.substring(1)
它检索URL的散列部分,然后修剪掉第一个字符(第一个字符始终是散列符号"#")。这里有一些相关的文档:Javascript Tutorial, Location.hash。完成后,请执行类似以下的操作:
jQuery("#area p:has(a[name=" + anchorName + "])").show();
这将显示#area
中包含具有在URL的散列部分中指定的名称的锚点的任何段落。
编辑
为了解决jQuery太快的问题,你可以使用更花哨的选择来只隐藏那些最终会隐藏的,如下所示:
$("#area > p:not(:first)").filter("p:not(:has(a[name=" + anchorName + "]))").hide();
也就是说,取除第一个段落之外的所有段落,然后取那些不包含锚点的段落的子集,并为name
属性指定一个值,然后隐藏剩下的所有段落。第一个段落以及任何包含带有给定名称的锚点的内容都将保持可见。
这是一个现场演示:http://jsfiddle.net/JDQxP/
因为我们不能从jsFiddle上的URL获取散列,所以我用静态值替换了该行。一次取消一个注释,以查看每个注释的效果。请注意,"phasellus“锚点在包装器范围内,但选择器仍然在其上正常工作。
https://stackoverflow.com/questions/3637137
复制相似问题