我想在点击链接时运行一些功能,但我想排除符合某些条件的链接...我不知道我在哪里出错,但它似乎仍在运行该功能与h #top
。
$('a').click(function () {
if(($(this).not('[href*="#"]') && $(this).not(".TypesOfProperties") && $(this).not('[target]')) || $(this).is('[target="_parent"]')) {
// DO SOMETHING
}
});
和...
<a href='#top'>Don't run function</a>
<a class='.TypesOfProperties' href='/mypage'>Don't run function</a>
<a target='_blank' href='/mypage'>Don't run function</a>
<a href='/mypage'>Do run function</a>
<a target='_parent' href='/mypage'>Do run function</a>
有什么想法吗?
答案 0 :(得分:0)
这样你就可以绑定更少的不必要的处理程序。
$('a[target="_parent"]').not('[href*="#"],.TypesOfProperties,[target]').click(function() {
// DO SOMETHING
});
答案 1 :(得分:0)
与.is()
不同,.not()
不返回true或false,它返回一个jQuery对象。
给定一个表示一组DOM元素的jQuery对象,.not()方法从匹配元素的子集构造一个新的jQuery对象。提供的选择器针对每个元素进行测试;与选择器不匹配的元素将包含在结果中。
jQuery doc:http://api.jquery.com/not/
如果你想要你的陈述,你需要检查这样的长度:
if(($(this).not('[href*="#"], .TypesOfProperties, [target]').length) || $(this).is('[target="_parent"]'))
如果length = 0
,则与false相同。
答案 2 :(得分:0)
$(this).not(...)
不是检查,它会删除不满足给定条件的元素。
因此,如果单击<a href="#top">
,则$(this).not('[href*="#"]')
将返回一个空的jQuery对象。
您可以检查长度(和多个选择器):
if ($(this).not('[href*="#"] , .TypesOfProperties').length || $(this).is('[target="_parent"]')) {