语法错误,jquery类选择器的无法识别的表达式

时间:2015-03-05 14:07:14

标签: jquery flask jinja2

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

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

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

“sale_id.rowclass”变量从我的jinja模板传入。 当变量是单值的(例如“n133”)时,该语句完美地起作用 当变量保持双精度值时,例如。 “危险n133”

我明白了:

  

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

关于我做错的任何想法?

解决:

感谢所有海报,我是jquery和javascript的新手,你们教了我很多。

为了能够删除包含类“strong n123” OR 的包含类“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

3 个答案:

答案 0 :(得分:1)

类值必须用引号括起来。

答案 1 :(得分:1)

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

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

请注意,如果您的行同时包含这些类但不按此顺序排列,则不会选择它们 - see this fiddle,我要做的是使用以下选择器删除这两个行类:

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

Example

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

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();
}

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

快得多

答案 2 :(得分:1)

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

table#success tr.classA.classB

或者按属性样式:

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

您可以使用.split()函数

从sale_id.rowclass获取单独的值

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