我想获取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选择器 - 例如find
,next
,nextAll
,.filter
,.prev
(使用css param)等。
有一些功能,如.parent
或{{1}},不会有css选择器 - 我知道这一点。
为什么我需要那个? - 我有plugin。它需要一些基于选择器创建的jQuery集,并对这些项执行一些功能。但是 - 函数需要在以后添加的新项目中执行,如果它们在设置创建代码执行时存在,将与该集合匹配。为了更好地理解,请查看插件页面。
答案 0 :(得分:1)
.selector
属性为deprecated,只能在通过直接传递选择器字符串创建jQuery元素集时使用。如您所见,一旦您开始从原始集合中链接遍历或过滤方法,.selector
就会完全停止表示有效的选择器。从.selector
可能具有的价值观来看,它似乎不是用于除内部使用之外的其他任何东西。
但这里真正的问题是并非所有的元素集都可以用有效的CSS选择器表示(不管怎么说都没有枚举所有可能的:nth-child()
排列),其中最重要的是因为许多jQuery'非标准选择器没有标准等价物。即使您将自己限制为可以使用选择器表示的标准选择器和遍历方法,如果原始元素集是通过其他方式获得的,或者如果它是正常获得然后被篡改,则无法检测到这一点,甚至没有使用我提到的.selector
,无论如何都被弃用了。
如果确实需要一个匹配您选择的选择器字符串,最简单的方法是手动编写它并将其存储在单独的变量中。