【问题标题】:Unsure about what this Javascript code do不确定这段 Javascript 代码的作用
【发布时间】:2015-09-24 03:25:56
【问题描述】:

所以,我正在读取一个包含以下代码的 JS 文件:

$('a[href]:not(.no-ajaxy):not([target="_blank"]):not([href^="#"]):not([href^="mailto:"]):not(.comment-edit-link):not(.comments-link):not(#cancel-comment-reply-link):not(.comment-reply-link):not(#toggle-nav):not(.logged-in-as a):not(.add_to_cart_button):not(.section-down-arrow):not([data-filter]):not(.pp):not([rel^="prettyPhoto"]):not(.pretty_photo)').click(function(e){

提高可读性

$('a[href]:not(.no-ajaxy)
:not([target="_blank"])
:not([href^="#"])
:not([href^="mailto:"])
:not(.comment-edit-link)
:not(.comments-link)
:not(#cancel-comment-reply-link)
:not(.comment-reply-link)
:not(#toggle-nav)
:not(.logged-in-as a)
:not(.add_to_cart_button)
:not(.section-down-arrow)
:not([data-filter])
:not(.pp)
:not([rel^="prettyPhoto"])
:not(.pretty_photo)')
.click(function(e){

所以,我认为它是一个挂钩,它附加到所有<a href=...> 链接,当它们被点击时触发,但在某些情况下它被排除在外。但是我似乎无法理解以下情况:

  • .no-ajaxy 是应用于<a class="no-ajaxy"> 的类还是可以应用于父元素?以.开头的所有其他非过滤器也是如此

  • rel^="prettyPhoto" 我认为这意味着如果链接如下<a href="..." rel="prettyPhoto"> 它不会匹配这个,因为它说不是这个,对吧?

我已经尝试了一些案例来匹配这些排除项,但似乎有什么东西让它忽略了这些条件。

【问题讨论】:

  • 简答:选择一组元素并注册一个点击处理程序。这是一个很长的选择器,所以只需从头开始,逐个标记地处理它。
  • PS. 不要假设,而是检查各种选择器上的documentation
  • no-ajaxy 是一个来自ajaxify-html.js 插件的类。它基本上说不要在该类的元素上使用ajax。所以我认为它将钩子应用于所有没有类.no-ajaxy<a>标签
  • 我非常感谢这些链接,虽然我刚开始使用 Javascript 并且不知道它是 jQuery 选择器。我觉得没有必要仅仅因为这个问题是一个新手问题就那么讨厌这个问题。

标签: javascript jquery html css


【解决方案1】:

首先,都是关于jQuery selectors

代码,逐个选择器解释:

  • a[href] 具有href 属性的所有<a> 元素,并且:
  • :not(.no-ajaxy) 没有 CSS 类 no-ajaxy
  • :not([target="_blank"]) 没有 target 属性值 _blank
  • :not([href^="#"]) 没有以 '#' 开头的 href 属性
  • :not([href^="mailto:"]) 没有以 'mailto:' 开头的 href 属性
  • :not(.comment-edit-link) 没有 CSS 类 comment-edit-link
  • :not(.comments-link) 没有 CSS 类 comments-link
  • :not(#cancel-comment-reply-link) 没有 ID cancel-comment-reply-link
  • :not(.comment-reply-link) 没有 CSS 类 comment-reply-link
  • :not(#toggle-nav) 没有 ID toggle-nav
  • :not(.logged-in-as a) 没有 CSS 类 logged-in-as 的父节点
  • :not(.add_to_cart_button) 没有 CSS 类 add_to_cart_button
  • :not(.section-down-arrow) 没有 CSS 类 section-down-arrow
  • :not([data-filter]) 没有属性 data-filter
  • :not(.pp) 没有 CSS 类 pp
  • :not([rel^="prettyPhoto"]) 没有以 'prettyPhoto' 开头的属性 rel
  • :not(.pretty_photo)' 没有 CSS 类 pretty_photo

所以,它获取所有符合上述条件的锚标签,并为它们注册click事件处理程序。

【讨论】:

  • 好吧,我终于明白了。非常感谢您的帮助。
  • 现在,CSS 类适用于 <a> 元素,忽略父母或孩子。
  • @SHiRKiT 是的,仅适用于元素
猜你喜欢
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 2013-12-19
  • 2011-05-09
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多