Javascript 为什么CSS选择器是';表tr:not(tr:n个孩子(偶数))和#x27;抛出一个打字错误?
此选择器为什么工作:Javascript 为什么CSS选择器是';表tr:not(tr:n个孩子(偶数))和#x27;抛出一个打字错误?,javascript,css-selectors,Javascript,Css Selectors,此选择器为什么工作: document.querySelectorAll('table tr:not(:nth-child(even))'); 虽然此选择器没有(抛出类型错误): var查询=(选择器)=>{ 返回单据.查询选择器all(选择器); }; 试一试{ var select_a='表tr:not(:n个子项(偶数)); var select_b='表tr:not(tr:n个子项(偶数))'; 查询(选择a).forEach((节点)=>{ node.style.color='re
document.querySelectorAll('table tr:not(:nth-child(even))');
虽然此选择器没有(抛出类型错误):
var查询=(选择器)=>{
返回单据.查询选择器all(选择器);
};
试一试{
var select_a='表tr:not(:n个子项(偶数));
var select_b='表tr:not(tr:n个子项(偶数))';
查询(选择a).forEach((节点)=>{
node.style.color='red';
});
查询(选择b).forEach((节点)=>{
node.style.color='blue';
});
}捕获(e){
查询('div:nth child(3)')[0]。textContent=e.toString();
}
var查询=(选择器)=>{
返回单据.查询选择器all(选择器);
};
试一试{
var select_a='表tr:not(:n个子项(偶数));
var select_b='表tr:not(tr:n个子项(偶数))';
查询(选择a).forEach((节点)=>{
node.style.color='red';
});
查询(选择b).forEach((节点)=>{
node.style.color='blue';
});
}捕获(e){
查询('div:nth child(3)')[0]。textContent=e.toString();
}
第1行名字
第1行姓氏
第1行电子邮件
第2行名字
第2行姓氏
第2行电子邮件
第3行名字
第3行姓氏
第3行电子邮件
第4行名字
第4行姓氏
第4行电子邮件
第5行名字
第5行姓氏
第5行电子邮件
为什么选择a工作而不选择b?
虽然此选择器没有(抛出类型错误):
:not()
只接受一个“简单选择器”,而tr:nth child(偶数)
不是一个
:
简单选择器可以是类型选择器、通用选择器、属性选择器、类选择器、ID选择器或伪类
两者都是这里的重要关键词。只允许这些选择器类型中的一种,不允许它们的组合
虽然此选择器没有(抛出类型错误):
:not()
只接受一个“简单选择器”,而tr:nth child(偶数)
不是一个
:
简单选择器可以是类型选择器、通用选择器、属性选择器、类选择器、ID选择器或伪类
两者都是这里的重要关键词。只允许这些选择器类型中的一种,而不允许它们的组合。为什么它可以工作呢?:-)因为
:not()
只接受一个“简单选择器”,而tr:n子项(偶数)
不是一个。“简单选择器可以是类型选择器、通用选择器、属性选择器、类选择器、ID选择器或伪类。”我认为这是因为CSS选择器级别3语法将:not()
子句中的选择器限制为简单选择器
,它可以是“类型”选择器(如tr
)或“子类”选择器。根据这条规则(这让我有点困惑),同时拥有tr
和:next-child()
是错误的,因为两者都有。我认为这是一个有趣的问题,因为从错误消息中根本看不出问题是什么。另外,我认为选择器级别4的语法放松了规则,允许使用“复合”选择器。@Pointy是的,没错,选择器级别4取消了限制,而支持选择器列表。(“简单/复合/复杂选择器列表是简单、复合或复杂选择器的逗号分隔列表。当类型不重要或在周围的散文中指定时,这也被称为选择器列表”)为什么它可以工作因为:not()
只接受一个“简单选择器”,而tr:n子项(偶数)
不是一个。“简单选择器可以是类型选择器、通用选择器、属性选择器、类选择器、ID选择器或伪类。”我认为这是因为CSS选择器级别3语法将:not()
子句中的选择器限制为简单选择器
,它可以是“类型”选择器(如tr
)或“子类”选择器。根据这条规则(这让我有点困惑),同时拥有tr
和:next-child()
是错误的,因为两者都有。我认为这是一个有趣的问题,因为从错误消息中根本看不出问题是什么。另外,我认为选择器级别4的语法放松了规则,允许使用“复合”选择器。@Pointy是的,没错,选择器级别4取消了限制,而支持选择器列表。(“简单/复合/复合选择器列表是简单、复合或复合选择器的逗号分隔列表。当类型不重要或在周围的散文中指定时,这也称为选择器列表”)
document.querySelectorAll('table tr:not(tr:nth-child(even))');
document.querySelectorAll('table tr:not(tr:nth-child(even))');