2010-01-27 24 views
1

寻找获取使用jQuery或Extjs的特定元素的xpath和css选择器的最佳方法。基本上选择一个随机元素并遍历dom并检索它是唯一的css选择器或xpath。有没有可以做到这一点的功能,或者有没有人可以做到这一点的自定义功能?获取特定元素的xpath和css选择器的最佳方法

+0

想法是对其执行反向查找,以使用生成的xpath或css选择器再次选择该元素。像网络抓取项目或类似的。 – Jalmarez 2010-01-27 18:19:45

回答

3

为什么不只是检查一个“ID”值,如果有一个只是使用它。如果没有,则生成一个唯一的随机“id”值,将其赋给该元素,然后使用该值。

编辑:这里是一个概念证明jQuery hack来为你点击的任何元素建立一个选择器。

$('*').unbind('click.m5').bind('click.m5', function(ev) { 
    if (this != ev.target) return; 

    var cn = function(elem) { 
    var n = $(elem).parent().children().index(elem); 
    return elem.tagName + ':nth-child(' + n + ')'; 
    }; 
    var selector = cn(this); 
    $(this).parents().each(function() { 
    if (/BODY|HTML/.test(this.tagName)) 
     selector = this.tagName + '>' + selector; 
    else 
     selector = cn(this) + '>' + selector; 
    }); 
    console.log("Selector: " + selector); 
    $(selector).css('background-color', 'red'); 
}); 
+0

是的......但在网页抓取的情况下,这不适用于回访。 – Jalmarez 2010-01-27 18:21:39

+0

嗯,这是真的,但如果你是网站抓取一个网站,你无法控制你可能无法依靠任何内容是一致的。换句话说,身体中第二个“h1”之后的第一个“div”下的第四个“div”的第三个孩子“跨度”可能与上次在那里看到的内容相同或不同。 – Pointy 2010-01-27 18:45:12

+0

是的,但它应该工作一段时间,直到它被更改并需要更新。我在想,CSS选择器可能会做得更好。 – Jalmarez 2010-01-27 18:59:28

0

对于任何给定元素都有无限数量的选择器。你需要什么?您可以使用Firefox插件XPather

+0

需要能够对其执行反向查找以使用生成的xpath或css选择器再次选择该元素 – Jalmarez 2010-01-27 17:56:30

+0

我得到了。问题是相当的;如果你有元素,为什么不简单地存储对它的引用呢?如果您正在进行网络抓取,为什么不能使用XPather之类的工具? – troelskn 2010-01-27 20:37:40