Jquery - 如果语句符合各种标准

时间:2013-07-01 15:00:48

标签: javascript jquery if-statement contains

我想在点击链接时运行一些功能,但我想排除符合某些条件的链接...我不知道我在哪里出错,但它似乎仍在运行该功能与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>

有什么想法吗?

3 个答案:

答案 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"]')) {