语法错误,无法识别 jquery class 选择器的表达式
Syntax error, unrecognized expression for jquery class selector
我正在使用 jquery 1.11.1 和 Flask/jinja2 模板
在尝试删除基于 class 的行时,我使用了
$("table#success tr[class=" + sale_id.rowclass +"]").remove();
"sale_id.rowclass" 变量是从我的 jinja 模板传入的。
当变量是单值时(例如"n133"),该语句可以完美地工作
当变量具有双精度值时,例如。 "danger n133"
我得到:
"Error: Syntax error, unrecognized expression: table#success
tr[class=danger n133]"
对我做错了什么有什么想法吗?
已解决:
感谢所有发帖者,我是 jquery 和 javascript 的新手,你们教了我很多东西。
为了能够删除包含 class " danger n123" 或 包含 class "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();
引号的位置让我抓狂。如果有更优雅的解决方案,我将不胜感激。
对于像我这样的新手,索引之间的逗号允许 "or"。
class 值需要用引号引起来。
您的问题是 class 之间的 space,您需要在选择器周围添加引号:
$("table#success tr[class='" + sale_id.rowclass +"']").remove();
请注意,如果您的行同时包含这两个 class 但顺序不同,它们将不会被选中 - see this fiddle,我会做的是使用如下所示的选择器来删除带有 both classes:
的行
var selector = '.' + sale_id.rowclass.replace(/ /g, '.');
$('table#success tr' + selector).remove();
如果你想删除任何带有 class 的行,你需要做一些事情:
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();
}
注意我使用了 class 选择器,因为它比属性选择器快得多
当一个元素有多个 类 时,需要将它们写在一起,只用点分隔它们。所以选择的方式应该是
table#success tr.classA.classB
或按属性样式:
table#success tr[class~="value1"][class~="value2"]
您可以使用 .split() 函数从 sale_id.rowclass 中获取单独的值
示例:var anArray = aString.split(" ");
我正在使用 jquery 1.11.1 和 Flask/jinja2 模板
在尝试删除基于 class 的行时,我使用了
$("table#success tr[class=" + sale_id.rowclass +"]").remove();
"sale_id.rowclass" 变量是从我的 jinja 模板传入的。 当变量是单值时(例如"n133"),该语句可以完美地工作 当变量具有双精度值时,例如。 "danger n133"
我得到:
"Error: Syntax error, unrecognized expression: table#success tr[class=danger n133]"
对我做错了什么有什么想法吗?
已解决:
感谢所有发帖者,我是 jquery 和 javascript 的新手,你们教了我很多东西。
为了能够删除包含 class " danger n123" 或 包含 class "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();
引号的位置让我抓狂。如果有更优雅的解决方案,我将不胜感激。
对于像我这样的新手,索引之间的逗号允许 "or"。
class 值需要用引号引起来。
您的问题是 class 之间的 space,您需要在选择器周围添加引号:
$("table#success tr[class='" + sale_id.rowclass +"']").remove();
请注意,如果您的行同时包含这两个 class 但顺序不同,它们将不会被选中 - see this fiddle,我会做的是使用如下所示的选择器来删除带有 both classes:
的行var selector = '.' + sale_id.rowclass.replace(/ /g, '.');
$('table#success tr' + selector).remove();
如果你想删除任何带有 class 的行,你需要做一些事情:
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();
}
注意我使用了 class 选择器,因为它比属性选择器快得多
当一个元素有多个 类 时,需要将它们写在一起,只用点分隔它们。所以选择的方式应该是
table#success tr.classA.classB
或按属性样式:
table#success tr[class~="value1"][class~="value2"]
您可以使用 .split() 函数从 sale_id.rowclass 中获取单独的值
示例:var anArray = aString.split(" ");