【发布时间】:2015-06-08 11:53:51
【问题描述】:
假设我有这样的元素:
<div class="some-class"></div>
和选择器类似:
#mydiv.super.another-class[some-attribute="true"]
我想让我的 div 匹配这个选择器。这需要
- 添加 id
mydiv - 添加类
super、another-class - 添加属性
some-attribute和值true
所以最终的 div 看起来像
<div class="some-class super another-class" id="mydiv" some-attribute="true"></div>
有没有办法做类似的事情
$(".some-class").makeMatch('#mydiv.super.another-class[some-attribute="true"]');
这将解析选择器并为任何有效选择器执行上面列出的步骤?
我知道我可以做一些函数来解析选择器并做到这一点,但是选择器可能非常复杂,并且相同的选择器可能以多种不同的方式组成,因此我决定尝试找到一些可靠的现有解决方案。
你知道类似的事情吗,或者有什么本地方法吗?
编辑:根据 cmets,我将尝试以不同的方式解释我的问题。
问题的重点是:
是否可以使用 javascript 解析任何有效的选择器以知道它指向什么 id、什么类和什么属性?
所以我们会喜欢
var selectorData = parseSelector('#my-id.class-one.class-two[attr-one="value-one"]');
selectorData.id //my-id
selectorData.classes //class-one class-two
selectorData.attributes["attr-one"] //value
因为有了关于选择器的这些数据,所以很容易让任何元素匹配它。
【问题讨论】:
-
这是一个非常有趣的用例,虽然有点晦涩难懂。选择器确实很复杂,但是您尝试做的事情的性质会产生一些有趣的限制,可以通过这些限制来缩小潜在解决方案的范围。例如,只有特征选择器(类型、ID、类和属性)和可能的结构伪类可以被接受。尽管可能必须编写一个成熟的解析器,但精确的实现可能有点宽泛,即使解析器仅限于处理仅由特征选择器组成的单个复合选择器。
标签: javascript jquery css jquery-selectors css-selectors