“$($())”选择器中的额外“$()”有什么作用?

时间:2015-08-18 06:22:27

标签: javascript jquery html

我想将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.为什么会发生这种情况?

3 个答案:

答案 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元素提供 href属性。如果你想将这个字符串转换为jQuery对象并进行进一步的操作,你可以使用额外的$()来实现它

$($(this).attr("href"))