Javascript 过滤器导致错误
假设我们有一个Javascript 过滤器导致错误,javascript,jquery,filter,Javascript,Jquery,Filter,假设我们有一个表,其中有一些tr子项。第一个tr具有th子元素,其他tr元素具有td子元素。假设触发了一行上的事件。给定的tr的jquery对象是rawRow行将保存rawRow的所有有用的td元素。我想排除第一个td,当且仅当相应的th没有内部文本时。我就是这样做的: var row = rawRow.children("td"); if (!rawRow.parent().children("tr:first").children("th:first").text()) {
表
,其中有一些tr
子项
。第一个tr
具有th
子元素
,其他tr
元素具有td
子元素。假设触发了一行上的事件。给定的tr
的jquery对象是rawRow
<代码>行将保存rawRow
的所有有用的td
元素。我想排除第一个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内部
如果我看一下,我可以看到类似的用法:
$( "li" ).filter( ":even" ).css( "background-color", "red" );
我的剧本做错了什么?还是一个jquery bug
编辑:
在等待答案的过程中,我一直在阅读和实验。此解决方案的工作原理是:
row = row.filter(function(index) {
return !!index;
});
但很自然,这是一个替代方案,它不能回答问题。使用时:不作为过滤器或选择器使用括号 您得到的错误只是由于jQuery解析选择器的方式造成的
var row = rawRow.children("td");
if (!rawRow.parent().children("tr:first").children("th:first").text()) {
row = row.filter(":not(:first)");
}
很好,回答,肖恩,我很快就会接受的。我现在要吃饭了。我已经试过了,它的效果和预期的一样!