我正在编写一个应用程序,我将对元素的相对引用存储为适合传递给querySelector的CSS选择器。当我想存储对“base”元素的相对引用时,我希望有一个返回相同元素的选择器。
满足以下条件的Level 1 Selectors API中定义的querySelector
Element
方法的标识选择器是什么?
var identitySelector = "<this is the selector I want to know>"
for (int i = 0; i < document.all.length; i++) {
var elem = document.all[i];
if (elem !== elem.querySelector(identitySelector)) {
throw identitySelector + " is not the identity selector";
}
}
更新
由于此选择器不可用,我将使用一个函数将我对querySelector的调用包装起来,如果选择器等于伪类:root
,则该函数返回上下文元素。
var identitySelector = ":root"
var querySelectorProxy = function(elem, selector) {
return selector === ':root' ? elem: elem.querySelector(identitySelector);
}
for (int i = 0; i < document.all.length; i++) {
var elem = document.all[i];
if (elem !== querySelectorProxy(elem, selector)) {
throw identitySelector + " is not the identity selector";
}
}
答案 0 :(得分:3)
没有一个。
John Resig在他的博客主题link to a discussion中提供了Thoughts on querySelectorAll。
他的优点是,虽然您可以从任何元素节点进行搜索,但您传递的选择器会考虑整个文档。 (就个人而言,我认为这是正确的方法。)因此,他希望会有一个像你所描述的身份选择器。
jQuery(Sizzle)通过使用元素的ID(或者如果不可用则分配临时的ID)来使用一些黑客,并重构选择器以预先添加该ID选择器。
这样的事情:
var identitySelector = "<this is the selector I want to know>"
for (int i = 0; i < document.all.length; i++) {
var elem = document.all[i],
needs_id = false;
if( !elem.id ) {
needs_id = true;
elem.id = '___some___obscure___value___';
}
if (elem !== elem.querySelector( '#' + elem.id )) {
throw identitySelector + " is not the identity selector";
}
if( needs_id ) {
elem.id = null;
}
}
......虽然我不知道这会在这里完成什么。