我想将jQuery scrollspy实现到我正在处理的项目之一。
我找到了这个jsfiddle(https://jsfiddle.net/mekwall/up4nu/),我设法将其实现到我的项目中。我希望修改它,但我仍然试图理解这段代码意味着什么。
var topMenu = $("#top-menu"),
menuItems = topMenu.find("a"),
// Anchors corresponding to menu items
scrollItems = menuItems.map(function(){
var item = $($(this).attr("href"));
if (item.length) { return item; }
});
我一般都知道,代码将搜索所有“a”链接,通过attr()函数找到href,如果存在,则将其添加到地图中。我不明白的是
$($(this).attr("href"));
额外的$()选择器是什么意思?我明白了
$(this).attr("href");
表示选择/检索此元素的href。 $()做什么?它是嵌套的选择器吗?我试过谷歌搜索,但我找不到它的答案,或者我的谷歌不符合标准。
另外,
$($(this).attr("href"));
只检索以下格式的链接index.html#section-one或#section-one?
更新
另外,'。length'如何确定元素是否存在于DOM中?当我检查控制台日志时,带有'index.html#section-one'的href链接将返回0的长度,而只有'#section-one'的href链接将返回长度为1.为什么会发生这种情况?
答案 0 :(得分:3)
该代码假定href
属性将成为id
引用,例如#about
。外部$()
继续前进并为您抓取#about
元素。
答案 1 :(得分:2)
在您的情况下,href
是锚名称(或片段标识符),可以方便地加倍作为id
选择器。通过引用href
属性然后将其与$()
包装在一起,您就可以有效地选择具有id
的元素。
因此,<a href='#faq'>
通常会跳转到命名锚点#fa;&#34;,但是通过包裹href
的attr值,您可以选择$('#faq')
答案 2 :(得分:1)
$($(this).attr("href"));
在上面的表达式中,$(this).attr("href")
将为指定的html元素
$($(this).attr("href"))