2011-09-16 36 views
4

我正在写一个应用程序,我将元素的相对引用存储为适合传入querySelector的CSS选择器。当我想存储对“基本”元素的相对引用时,我想有一个选择器将返回相同的元素。element.querySelector的标识选择器?

Level 1 Selectors API中定义的ElementquerySelector方法的身份选择器如何满足以下条件?

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"; 
    } 
} 

回答

3

没有一个。


约翰Resig的他的博客话题Thoughts on querySelectorAll中提供的link to a discussion

他的牛肉是,虽然你可以从任何元素节点搜索,您传递的选择器将考虑整个文档。 (我个人认为这是正确的做法。)正因为如此,他希望会有像你所描述的身份选择器。 (或者分配一个临时的元素,如果不可用的话)和重构选择器来预先设置这个ID选择器,jQuery(Sizzle)会使用一点黑客技术。

事情是这样的:

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; 
    } 
} 

...虽然我不知道这是什么将完成在这里。

+0

感谢您的快速回答。作为我的应用程序中的一个解决方案,我将持久化一个null或者丢失的选择器,将其转换为提议的“:root”伪元素选择器,并将我的调用包装为querySelector以处理该输入。 – ironchefpython

+0

@ironchefpython:不客气。听起来像一个很好的计划。 – user113716

相关问题