【问题标题】:Jquery - if statement match various criteriaJquery - 如果语句匹配各种条件
【发布时间】:2013-06-28 18:11:36
【问题描述】:

我想在单击链接时运行一些功能,但我想排除符合某些条件的链接...我不确定我哪里出了问题,但它似乎仍在运行该功能带有#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>

有什么想法吗?

【问题讨论】:

  • 也提供html代码
  • 似乎为您想要的标准创建一个处理程序会更容易,而不是过滤掉所有您不想要的标准。肯定有什么东西可以将这些链接分开。
  • 一个小问题:您的代码中有语法错误。在最后一个花括号之后应该有一个右括号(为了更好的形式,一个终止分号)。

标签: javascript jquery if-statement contains


【解决方案1】:

.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相同。

【讨论】:

  • .is(), not does not return true or false - 真的吗?
  • “与 .is() 不同,.not() 没有”
【解决方案2】:

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

$('a[target="_parent"]').not('[href*="#"],.TypesOfProperties,[target]').click(function() {
     // DO SOMETHING
});

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 2022-01-14
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 2022-07-08
      • 2021-01-29
      相关资源
      最近更新 更多