【问题标题】:jQuery not() working but throws 'unrecognized expression .' errorjQuery not() 工作但抛出“无法识别的表达式”。错误
【发布时间】:2013-07-05 19:18:09
【问题描述】:

我有一组元素,我正在使用一些链接进行过滤。元素具有定义单击链接时是否应显示/隐藏它们的类。一切正常,除了每次点击都会出现这个错误:

未捕获的错误:语法错误,无法识别的表达式:。 jquery.js?v=f7cfcab3b68cbd79eec30032754a6719:3

这与我下面的.not() 选择器有关。我尝试了各种替代方案(例如:not,包括/不包括单引号和双引号,但没有什么能摆脱错误:

var teamFilters = {
    dept: '',
    field: ''
}, filter;
$('.team-member-filters a').click(function() {
    var link = $(this);
    filter = $(this).attr('class');
    if (link.parent().hasClass('active')) {
        link.parent().removeClass('active');
        teamFilters[filter] = '';
    } else {
        link.parent().addClass('active').siblings().removeClass('active');
        teamFilters[filter] = $(this).attr('id');
    }
    $('.main-body .team-member').animate({opacity: 1}, 250);
    $('.main-body .team-member').not('.' + teamFilters.dept).animate({opacity: 0.25}, 250);
    $('.main-body .team-member').not('.' + teamFilters.field).animate({opacity: 0.25}, 250);

    //console.log(teamFilters.dept);
});

被过滤的单个元素的 HTML 是:

<div class="team-member secretariate reducing">
    <div>
        <img src="/~climatex/files/cache/9d8d7862edc9f22dab5245926f79dace_f52.jpg" width="75" height="75" alt="">
        <p class="name">Firstname Lastname</p>
        <p class="position">Job title</p>
    </div>
    <a class="email" href="mailto:name@email.com">name@email.com</a>
    <a href="http://www.url.com" target="_blank">www.url.com</a>
</div>

'.' + teamFilters.dept 选择器抛出错误,但由于一切正常,我不知道为什么。

我尝试在.not() 选择器之外连接'.'+teamFilters.dept 变量,但没有任何区别。

我正在运行 jQuery 1.7.2。

任何帮助表示赞赏!

【问题讨论】:

  • 您的 html 似乎大部分都被评论了。
  • 抱歉打错了,已编辑

标签: jquery jquery-selectors


【解决方案1】:

你的报价过高了。

.not('".' + teamFilters.dept + '"')

应该是

.not('.' + teamFilters.dept)

当然,teamFilters.dept 似乎永远不会改变这个定义:

var teamFilters = {
    dept: '',
    field: ''
}

...如果是这样的话,你最终会得到一个无效的选择器。

【讨论】:

  • 更改引用似乎没有帮助——我仍然看到错误。 NB teamFilters 的属性是在click 事件中较早设置的
  • 你是对的!这是无效的选择器——因为它每次都尝试同时选择teamFilters.deptteamFilters.field,在页面加载时这两个都没有设置,因此出现错误。我在if 语句中添加了在尝试选择之前测试它们是否存在。谢谢!
【解决方案2】:

如果你只是过滤掉类,我认为你不需要引号:

.not('.' + teamFilters.dept)

【讨论】:

  • 是的,当我按照您显示的方式进行选择时,它可以工作,但我仍然看到错误。我将编辑 OP 以反映这一点。
  • teamfilters.dept 的值是多少?
  • 我把它整理出来——问题是我每次点击过滤器时都试图选择,但第一次点击(根据定义)只定义了两个过滤器中的一个,因此出现错误。在尝试使用对象的属性构造选择器之前,我通过测试查看对象的属性是否具有值来修复它。
猜你喜欢
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多