在jQuery中,$($(this).attr('href'))是什么意思?

5

我对jQuery还比较新,并且了解基础知识,但是我在针对页面的某些部分时遇到了问题,因此需要填补一些知识盲区。

确实知道$(this).attr('href')会获取当前聚焦/点击元素中的href属性。

但如果写成这样$($(this).attr('href'));呢?

这是我在一个我没有编写的脚本中的代码,我不确定这是一个错误还是故意的。

我有一种感觉这很基础,但是如何搜索$($())? 当我搜索$($(this).attr('href'))时,我只得到关于原始子句的文档,而我已经理解了。

这只是一个错别字还是一个单独的用例?


1
可能是将jQuery代码转换为JavaScript的简单方法吗?的重复问题。 - A. Meshu
4
$($(this).attr("href")) 获取 "href" 属性的值,然后将其传递回 jQuery 函数。这只是一个函数调用,没有什么神奇的地方。如果没有看到更多代码和它所设计的 HTML 标记,就无法确定代码为什么这样做。 - Pointy
1
这取决于 $(this).attr('href') 是什么。唯一确定的是它是一个字符串(或 undefined),所以它是 $( 某个字符串 )。编辑:下面 Crazy Train 的评论很有可能:它确实可以是片段标识符 #foo,用作 ID 选择器 foo - Sebastian Simon
7
该元素的href可能类似于#foo,这与我们用于选择ID的语法相同。因此基本上是在说:“获取与此href的哈希值相同的ID元素”。 - user2437417
1
它正在查找DOM树中的元素。将选择器字符串传递给$函数总是在DOM上执行查询。 - user2437417
显示剩余8条评论
1个回答

6
正如您所说,$(this).attr('href')返回匹配元素的href。那是一个字符串。然后将该字符串传递给$,它不知道它是href,因此像处理任何其他字符串一样:解析它,决定它是否看起来像HTML或选择器,然后返回生成的jQuery实例。
可能情况是,在某些上下文中,href也恰好是有效的选择器或有效的HTML。正如评论中提到的那样,一个很有可能的候选者是像#something这样的字符串,作为href链接到具有ID something的元素的滚动位置,并且作为选择器告诉jQuery选择相同的元素。

谢谢您提供这个额外的澄清,它确实有帮助,而且您对它的使用背景非常准确! - weekapaug
2
@Crazy Train:Spudley 的意思是针对外部 $() 调用进行了消毒。根据脚本的功能,意外输入可能会无效,也可能会导致一些不良后果。 - BoltClock
@Crazy Train:即使是合法的片段标识符,如果不先进行转义,也不一定能直接转换为有效的ID选择器。这里有一个例子。 - BoltClock
@BoltClock:我明白,并不是所有的片段标识符都是有效的选择器,但这并不意味着它是一种注入漏洞。当我访问属性而不是属性时,它会给我原始版本的经过处理的版本。因此,如果原始版本是#html>body,它将给我#html%20%3E%20body - user2437417
@Crazy Train:啊,没错。在这种情况下,href属性是特殊处理的,它总是返回一个完全合格的、URL编码的地址。 - BoltClock
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接