Jquery:语法错误,无法识别的表达式:nth-​​child()

时间:2013-06-07 09:59:45

标签: jquery html jquery-selectors

我已经用别人的答案来解决这个问题。

Jquery的:

$("input:checkbox:not(:checked)").each(function() {
    var columnName = $(this).attr('name');
    $('td:nth-child(' + columnName + '),th:nth-child(' + columnName + ')').hide();
});

$("input:checkbox").click(function() {
    var columnName = $(this).attr('name');
    $('td:nth-child(' + columnName + '),th:nth-child(' + columnName + ')').toggle();
});

HTML:

<input type="checkbox" name="1" checked="checked"/>

当我将值放在:nth-​​child(1)中时它起作用,但是当我包含变量时它不起作用。我做错了还是使用了错误的Jquery库。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

我猜你有一个或多个<input type="checkbox" /> name属性一个数字,或者不存在。

例如:

<input type="checkbox" name="string" />

使用您的代码时,会输出您所描述的错误:

Uncaught Error: Syntax error, unrecognized expression: :nth-child

See fiddle

解决方法是检查columnName是否为有效数字:

var columnName = $(this).prop('name') || '0';

if (columnName.match(/^[1-9]\d*$/)) {
  // columnName must start with a number between 1 to 9
  // and can be proceeded by zero or more numbers only
}

此外,最好将class分配给用于show/hide相应td/th's的复选框。

<input type="checkbox" class="showHide" name="1" />

这样,您只需选择/循环所需的元素,而不是页面上的每个复选框。

$('input.showHide').click(function() { ... });