首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery:如何不隐藏url中带有锚点的部分

jQuery:如何不隐藏url中带有锚点的部分
EN

Stack Overflow用户
提问于 2010-09-03 23:17:02
回答 1查看 1.4K关注 0票数 3

在我的页面上,h3标题下的大多数p部分都是隐藏的。如果你点击它们,下面的内容就会显示出来。打开页面时,只显示第一部分。我使用jQuery隐藏这些部分,如下所示:

代码语言:javascript
运行
复制
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知识很差,没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-03 23:31:22

要从URL获取锚点的名称,请使用以下行:

代码语言:javascript
运行
复制
var anchorName = document.location.hash.substring(1)

它检索URL的散列部分,然后修剪掉第一个字符(第一个字符始终是散列符号"#")。这里有一些相关的文档:Javascript Tutorial, Location.hash。完成后,请执行类似以下的操作:

代码语言:javascript
运行
复制
jQuery("#area p:has(a[name=" + anchorName + "])").show();

这将显示#area中包含具有在URL的散列部分中指定的名称的锚点的任何段落。

编辑

为了解决jQuery太快的问题,你可以使用更花哨的选择来只隐藏那些最终会隐藏的,如下所示:

代码语言:javascript
运行
复制
$("#area > p:not(:first)").filter("p:not(:has(a[name=" + anchorName + "]))").hide();

也就是说,取除第一个段落之外的所有段落,然后取那些不包含锚点的段落的子集,并为name属性指定一个值,然后隐藏剩下的所有段落。第一个段落以及任何包含带有给定名称的锚点的内容都将保持可见。

这是一个现场演示:http://jsfiddle.net/JDQxP/

因为我们不能从jsFiddle上的URL获取散列,所以我用静态值替换了该行。一次取消一个注释,以查看每个注释的效果。请注意,"phasellus“锚点在包装器范围内,但选择器仍然在其上正常工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3637137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档