我一直致力于自己的无头浏览器实现,我觉得我正在弄乱我的n-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值的测试,我有一套复杂的分支逻辑,我怀疑我使它变得比它需要的更复杂。
答案 0 :(得分:1)
如果我理解正确,您需要确定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)
来电。