【问题标题】:not jQuery selector不是 jQuery 选择器
【发布时间】:2016-08-01 18:11:00
【问题描述】:

这个 Meteor 客户端代码尝试在 form 上应用 jQuery .serializeArray,但不是 inactive 类的元素

const inputData = $('form:not[class="inactive"]').serializeArray();

为什么会失败以及如何解决?谢谢

【问题讨论】:

  • 您包含的错误消息并非来自您包含的代码
  • @Jamiec 谢谢。删除它。

标签: jquery meteor


【解决方案1】:

基本上,要将元素排除在serializeArray 之外,您需要禁用它们或删除它们的name。比如:

const inputData = $('form')
                      .find('.inactive')
                      .prop("disabled", true)
                      .end()
                      .serializeArray();

那个:

  • 查找所有表单
  • 找到其中的非活动元素
  • 确保这些元素被标记为disabled
  • 返回表单 (.end())
  • ...并序列化它们的元素。

重新尝试使用:not 选择器,存在一些问题:

  1. 您在:not 条件周围使用了[] 而不是()

  2. 在使用类时应该使用类选择器,而不是属性选择器

  3. 您将其应用于form,而不是应用于表单的元素

但由于您需要在表单上致电serializeArray,我们需要完全不同的方法(如上)。

【讨论】:

    【解决方案2】:

    使用:not 选择器时,请记住以下几点:

    1. 使用() 代替:not 而不是[]
    2. 不要选择class作为属性,使用类选择器
    3. 因为你要选择form里面的元素,form:not之间需要有一个空格,否则你只会选择all forms without .inactive class

    这将是一个正确的元素选择器:

    const inputData = $('form :not(.inactive)');
    

    要正确使用serializeArray,请查看@T.J.Crowder 的答案!

    【讨论】:

    • 实际上,还有第三件事:form 之后需要一个空格,正如 OP 所说“但不是类不活动的元素”只是不要选择具有该类的 form。事实上,虽然在细节上是正确的,但这并不能真正回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2011-12-17
    • 2010-10-09
    • 1970-01-01
    • 2012-05-22
    • 2012-06-24
    相关资源
    最近更新 更多