获取jQuery中所有匹配项的CSS选择器

时间:2015-02-21 23:17:19

标签: javascript jquery css jquery-selectors css-selectors

我想获取jQuery项目的CSS选择器。

在这种情况下设置的jQuery项目是指基于某些css选择器创建的jQuery集合,并通过.children之类的$(".basic-selector").children();等一些jQuery函数进行扩展,如$("div.someclaass").selector //works ok - gives div.someclass

直接选择等简单场景很容易实现:

$("div.someclass").children("p").selector //schould give div.someclass > p

但我还需要为更复杂的场景获取css选择器(这里jQuery没有返回有效的css选择器)

$("ul, ol").children("li").selector //should give ul > li, ol >li

对于像

这样的更多comples场景
children

有可能吗?

要求:

  • 必须是有效的css选择器

  • 我无法更改创建集的js代码

  • 它应该适用于所有这类jQuery函数 css选择器 - 例如findnextnextAll.filter.prev(使用css param)等。

有一些功能,如.parent或{{1}},不会有css选择器 - 我知道这一点。

为什么我需要那个? - 我有plugin。它需要一些基于选择器创建的jQuery集,并对这些项执行一些功能。但是 - 函数需要在以后添加的新项目中执行,如果它们在设置创建代码执行时存在,将与该集合匹配。为了更好地理解,请查看插件页面。

1 个答案:

答案 0 :(得分:1)

.selector属性为deprecated,只能在通过直接传递选择器字符串创建jQuery元素集时使用。如您所见,一旦您开始从原始集合中链接遍历或过滤方法,.selector就会完全停止表示有效的选择器。从.selector可能具有的价值观来看,它似乎不是用于除内部使用之外的其他任何东西。

但这里真正的问题是并非所有的元素集都可以用有效的CSS选择器表示(不管怎么说都没有枚举所有可能的:nth-child()排列),其中最重要的是因为许多jQuery'非标准选择器没有标准等价物。即使您将自己限制为可以使用选择器表示的标准选择器和遍历方法,如果原始元素集是通过其他方式获得的,或者如果它是正常获得然后被篡改,则无法检测到这一点,甚至没有使用我提到的.selector,无论如何都被弃用了。

如果确实需要一个匹配您选择的选择器字符串,最简单的方法是手动编写它并将其存储在单独的变量中。