【问题标题】:What does $($(this).attr('href')) mean in jQuery?$($(this).attr('href')) 在 jQuery 中是什么意思?
【发布时间】:2018-09-17 09:36:43
【问题描述】:

我是 jQuery 的新手,了解基础知识,但我在针对页面的某些部分时遇到问题,因此我需要填补一些知识空白。

确实了解$(this).attr('href') 会在当前聚焦/点击的元素中获得href 的属性。

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

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

我觉得这很基本,但是如何搜索$($())? 当我搜索$($(this).attr('href')) 时,我得到的只是关于我已经理解的原始条款的文档。

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

【问题讨论】:

  • $($(this).attr("href")) 获取“href”属性值,然后将其传递回 jQuery 函数。这只是一个函数调用;它没有什么神奇之处。如果没有看到更多代码以及它设计用于使用的 HTML 标记,就无法说出代码为什么会这样。
  • 这取决于$(this).attr('href') 是什么。可以确定的是它是一个字符串(或undefined),所以它是$( some string )。编辑:Crazy Train 的评论很可能:它确实可能是片段标识符 #foo,它充当 ID foo 的选择器。
  • 元素的href 可能类似于#foo,这与我们使用ID 选择的语法相同。所以它基本上是说,“获取ID与href的哈希相同的元素”
  • 它在 DOM 树中搜索一个元素。将 选择器字符串 传递给 $ 函数始终会在 DOM 上执行查询。

标签: javascript jquery


【解决方案1】:

如您所说,$(this).attr('href') 返回匹配元素的 href。那是一个字符串。然后将该字符串传递给$,它不知道它是一个href,因此将其视为处理任何其他字符串:它解析它,确定它看起来像HTML还是选择器,然后返回结果jQuery实例。

大概是在某些情况下,href 恰好也是一个有效的选择器或有效的 HTML。正如在 cmets 中提到的,一个可能的候选对象是像 #something 这样的字符串,它作为 href 链接到 ID 为 something 的元素的滚动位置,并且作为选择器告诉 jQuery 选择相同的元素。

【讨论】:

  • 感谢您提供的额外说明,它确实有所帮助,并且您了解它所使用的上下文!
  • 如果这是预期的结果,在我看来,那里可能存在看似合理的注入攻击。当然,如果这是本网站的一般编写方式,那么它很有可能以某种方式被利用。
  • @Spudley:我认为hrefs 会自动针对 HTML 进行清理。如果我先document.querySelector("a[href]").hash = "<foo>" 然后document.querySelector("a[href]").hash",我会得到"#%3Cfoo%3E"
  • @Crazy Train:Spudley 意味着出于外部 $() 调用的目的而进行了消毒。根据脚本的作用,意外输入可能什么都不做,或者做坏事。
  • @BoltClock:啊,使用attr() 确实不安全。使用.prop() 会更好,或者更好的是,直接访问该属性。
猜你喜欢
  • 2013-06-15
  • 2011-06-20
  • 2011-05-10
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 2011-08-22
相关资源
最近更新 更多