有没有办法获取DOM对象并推断出一个可用于稍后查找该元素的CSS选择器。
示例:
<ul class="items">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<script type="text/javascript">
var second = $('.items li:eq(1)');
console.log(get_css_selector(second));
</script>
get_css_selector
会返回类似于.items li:eq(1)
的内容,或者至少是一个可以用来选择元素的字符串。
如果有一种基于以下方法生成CSS选择器的方法,那就是奖励:
<script type="text/javascript">
var third = document.getElementsByTagName('li')[2];
console.log(get_css_selector(third));
</script>
答案 0 :(得分:3)
好像您正在尝试使用原始选择器。我是对的吗?或者我过度简化了什么?
原始选择器存储在您创建的jQuery对象中。
试一试: http://jsfiddle.net/9JUJL/
var second = $('.items li:eq(1)');
var selector = second.selector;
或者奖金,这个? http://jsfiddle.net/9JUJL/2/
function get_css_selector(elem) {
var tag = elem.tagName.toLowerCase();
return tag + ':eq(' + $(tag).index(elem) + ')';
}
答案 1 :(得分:1)
function createElementSelector(elm, containedInEle) {
containedInEle = typeof(containedInEle) != 'undefined' ? containedInEle : document;
var segs = [];
for (; elm && elm !== containedInEle; elm = elm.parentNode)
{
segs.unshift(':nth-child(' + childNumber(elm) + ')');
};
return '#' + elm.id + ' ' + segs.join(' ');
};
function childNumber(child) {
var i = 0;
while( child.nodeType == 1 && (child = child.previousSibling) != null) {
i++;
}
return i + 1;
};