假设我们有一个table
,其中有一些tr
children
。第一个tr
有th
children
,其他tr
元素有td
个孩子。让我们假设一行上的事件被触发。给定tr
的jquery对象是rawRow
。 row
将保留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;
});
但很自然地,这是一个替代方案,它没有回答这个问题。
答案 0 :(得分:2)
使用时:不作为过滤器或选择器使用括号。
你得到的错误只是由于jQuery解析选择器的方式。
var row = rawRow.children("td");
if (!rawRow.parent().children("tr:first").children("th:first").text()) {
row = row.filter(":not(:first)");
}