【问题标题】:Syntax error, unrecognized expression for jquery class selector语法错误,无法识别 jquery 类选择器的表达式
【发布时间】:2015-03-05 14:07:14
【问题描述】:

我正在使用带有 Flask/jinja2 模板的 jquery 1.11.1

在尝试根据类删除行时,我使用了

$("table#success tr[class=" + sale_id.rowclass  +"]").remove();

“sale_id.rowclass”变量是从我的 jinja 模板传入的。 但是,当变量是单值时(例如“n133”),该语句可以完美运行 当变量包含一个双精度值时,例如。 “危险n133”

我明白了:

"错误:语法错误,无法识别的表达式:table#success tr[class=危险 n133]"

关于我做错了什么有什么想法吗?

已解决:

感谢所有发帖者,我是 jquery 和 javascript 的新手,你们教会了我很多东西。

为了能够删除包含类“danger n123”的行包含类“n123”,我执行了以下操作。 感谢 Kevin Grabher 和 Grundy,我使用 .split() 函数从 sale_id.rowclass 中获得了单独的值

var clsvalues = sale_id.rowclass.split(" ");

然后

$("table#success tr[class~='" + sale_id.rowclass + "'],[class~='" + clsvalues[1] + "']").remove();

不过,引号的位置让我发疯了。如果有更优雅的解决方案,我会欢迎它。

对于像我这样的新手,索引之间的逗号允许“或”。 https://stackoverflow.com/a/2263976/4154955

【问题讨论】:

  • 我们能否获得一个代码示例来说明 sale_id.rowclass 是如何生成的?
  • 您需要在属性值周围添加引号,例如来自 doc:value: An attribute value. Can be either an unquoted single word or a quoted string.class='" + sale_id.rowclass +"']
  • @AngrySpartan 我先尝试 Grundy 的建议(因为它更短)。
  • @Grundy,我按照你的建议做了,它可以删除具有两个类值的行,但是我真的想删除同时具有两个类值的行或具有最后一个值。
  • @Pete,谢谢 Pete,不仅解决了我的问题,而且使我的代码更易于阅读,并更新了我对 jquery 选择机制的理解。我将这一行更改为$("table#success tr." + clsvalues[1]).remove(); Grundy 的最后一条评论,让我不再费心处理这些引号:) 我将编辑我的帖子以显示更新。多亏了你们 Grundy 和 Kevin Grabher 的努力,我才能够走到这一步。 Stackoverflow 似乎无法同时感谢所有人。

标签: jquery flask jinja2


【解决方案1】:

当一个元素有多个类时,它们需要写在一起,只用点分隔它们。所以选择应该工作的方式是

table#success tr.classA.classB

或者按属性样式:

table#success tr[class~="value1"][class~="value2"]

您可以使用 .split() 函数从 sale_id.rowclass 中获取单独的值

示例:var anArray = aString.split(" ");

【讨论】:

    【解决方案2】:

    类值需要用引号括起来。

    【讨论】:

      【解决方案3】:

      您的问题是类之间的空间,您需要在选择器周围添加引号:

      $("table#success tr[class='" + sale_id.rowclass  +"']").remove();
      

      请注意,如果您的行同时具有这两个类但不是按此顺序,它们将不会被选中 - see this fiddle,我会使用如下选择器删除具有 both 的行强>类:

      var selector = '.' + sale_id.rowclass.replace(/ /g, '.');
      $('table#success tr' + selector).remove();
      

      Example

      如果您想删除任何带有 either 类的行,您需要执行以下操作:

      var selector = 'table#success tr.' + sale_id.rowclass.replace(/ /g, ', table#success tr.');
      $(selector).remove();
      

      刚刚注意到您正在使用两个选择器搜索所有内容或使用最后一个选择器搜索任何内容。由于两个选择器都包含最后一个选择器,因此您只需搜索即可:

      var splitClasses = sale_id.rowclass.split(" ");
      if (splitClasses.length > 1) {
          $("table#success tr." + splitClasses[1]).remove();
      }
      

      注意我使用了类选择器,因为它比属性选择器快得多

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-18
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-21
        相关资源
        最近更新 更多