1

我想在单击链接时运行一些功能,但我想排除符合某些条件的链接......我不确定我哪里出错了,但它似乎仍然在链接上运行该功能#top的href

$('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>

有任何想法吗?

4

3 回答 3

0

$(this).not(...)不是检查,它删除不满足给定条件的元素。所以如果你点击<a href="#top">then$(this).not('[href*="#"]')返回一个空的 jQuery 对象。

您可以检查长度(和多个选择器):

if ($(this).not('[href*="#"] , .TypesOfProperties').length || $(this).is('[target="_parent"]')) {
于 2013-07-01T15:13:48.197 回答
0

这样,您将绑定更少不必要的处理程序。

$('a[target="_parent"]').not('[href*="#"],.TypesOfProperties,[target]').click(function() {
     // DO SOMETHING
});
于 2013-07-01T15:09:36.017 回答
0

.is(),.not()不返回 true 或 false 不同,它返回一个 jQuery 对象。

给定一个表示一组 DOM 元素的 jQuery 对象,.not() 方法从匹配元素的子集构造一个新的 jQuery 对象。提供的选择器针对每个元素进行测试;与选择器不匹配的元素将包含在结果中。

jQuery 文档:http ://api.jquery.com/not/

如果你想让你的声明工作,你需要像这样检查长度:

if(($(this).not('[href*="#"], .TypesOfProperties, [target]').length) || $(this).is('[target="_parent"]'))

如果length = 0,则与 false 相同。

于 2013-07-01T15:09:46.470 回答