所以,我正在阅读一个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">
,则不会与此匹配,因为它不是这样,对吗?
我已经尝试过一些与这些排除相匹配的案例,但似乎有些事情让它忽略了这些条件。
答案 0 :(得分:3)
首先,所有关于jQuery selectors。
代码,由选择器解释选择器:
a[href]
具有<a>
属性的所有href
元素,并且::not(.no-ajaxy)
没有CSS类no-ajaxy
:not([target="_blank"])
没有target
属性值_blank
:not([href^="#"])
没有以href
'#'
属性
:not([href^="mailto:"])
没有以href
'mailto:'
属性
: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"])
没有以rel
'prettyPhoto'
:not(.pretty_photo)'
没有CSS类pretty_photo
因此,它获取具有上述条件的所有锚标记,并为它们注册click
事件处理程序。