2010-01-27 48 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