我一直在研究我自己的 headless 浏览器实现,我觉得我把我的 nth-child 选择器逻辑搞得一团糟。给定一个元素及其在其兄弟组中从 0 开始的位置是否有一个简单的单行表达式来查看该元素是否属于结果集中?
public bool Evaluate(HTMLElement element)
{
if (element.parentNode == element.ownerDocument)
return false;
List<Element> children = element.Parent.Children
.Where(e => e is Element)
.Cast<Element>()
.ToList();
int index = children.IndexOf(element);
bool result = (an + b test here);
return result;
}
目前我有一组复杂的分支逻辑,基于 (a) 和 (b) 的 0 值测试,我怀疑我让它变得比需要的更复杂。
最佳答案
如果我理解正确,你需要确定是否存在 n
使得 index
= a*n + b
对于某些修复了a
,b
。
bool result = (a == 0) ? b == index : (Math.Abs(index - b) % Math.Abs(a)) == 0;
如果a
为0,则index
必须为b
。否则,a
必须平分 i
和 b
之间的差异。
当然,如果不允许 a
为负值,您可以跳过 Math.Abs(a)
调用。
关于C# nth-child 逻辑测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513155/