【发布时间】:2011-07-05 08:26:12
【问题描述】:
在document 的当前状态下,为 DOM 元素生成所有可能的 CSS 2 选择器组合的最佳方法是什么?
例如: 对于以下标记
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title></title>
</head>
<body>
<div id="content">
<ul>
<li>a</li>
<li>b</li>
<li class="last-li">c</li> <!--ARGUMENT ELEMENT-->
</ul>
</div>
</body>
</html>
一种 JS/jQuery 方法,使得上述标记中的 <!--ARGUMENT ELEMENT--> 作为该方法的参数,它以数组的形式返回参数的所有可能的 CSS 2 选择器组合。可以将一个可选参数添加到定义 CSS 2 选择器嵌套的最大深度的方法中。如果此参数设置为 false,它应该返回所有可能的组合(如果设置为 false,将是性能消耗者)
示例输出:
[
".last-li",
"li.last-li",
"ul .last-li",
"ul li.last-li",
"div ul .last-li",
"div ul li.last-li",
"#content ul .last-li",
"#content ul li.last-li",
"div#content ul .last-li",
"div#content ul li.last-li",
"body div ul li.last-li",
"body div ul .last-li",
"body #content ul li.last-li",
"body div#content ul .last-li",
"body div#content ul li.last-li",
]
这方面的任何指示都会非常有帮助。
【问题讨论】:
-
加入所有其他选择器,即使是最琐碎的文档也会生成大量可能的选择器。这肯定不是一个有用的练习吗?!
-
:root > :last-child :only-child:not(ul) :not(:nth-last-child(2n+1)) ~ li这样的东西怎么样? -
@BoltClock 你可以无限链接
:not。这不是一个明智的选择器,但它是一个有效的选择器。 -
@GeekTantra:那么你打算把引擎的所有可用资源都花在单独计算选择器上吗? 到底是为了什么?
-
@GeekTantra 我会重复其他人所说的话。您需要向我们说明您需要此列表的原因,以便我们可以将列表限制为合理的子集或建议替代解决方案。否则这将一事无成
标签: javascript jquery dom css-selectors