过滤器导致错误

时间:2016-01-08 17:10:25

标签: javascript jquery filter

假设我们有一个table,其中有一些tr children。第一个trth children,其他tr元素有td个孩子。让我们假设一行上的事件被触发。给定tr的jquery对象是rawRowrow将保留td的所有有用rawRow元素。我想排除第一个td,当且仅当相应的th没有内部文本时。这就是我尝试这样做的方式:

    var row = rawRow.children("td");
    if (!rawRow.parent().children("tr:first").children("th:first").text()) {
        row = row.filter(":not:first");
    }

然而,这会导致错误

  

未捕获的TypeError:无法读取未定义

的属性'replace'

在jquery-2.1.4.min.js。

如果我查看docs,我可以看到类似的用法:

$( "li" ).filter( ":even" ).css( "background-color", "red" );

我的剧本中出错了什么?或者它是一个jquery bug?

编辑:

在等待答案的同时,我一直在阅读和试验。该解决方案有效:

        row = row.filter(function(index) {
            return !!index;
        });

但很自然地,这是一个替代方案,它没有回答这个问题。

1 个答案:

答案 0 :(得分:2)

使用时:不作为过滤器或选择器使用括号。

你得到的错误只是由于jQuery解析选择器的方式。

var row = rawRow.children("td");
if (!rawRow.parent().children("tr:first").children("th:first").text()) {
    row = row.filter(":not(:first)");
}