2011-12-24 54 views
1

如何從dom獲取元素?jQuery Dom編號

+0

你是什麼意思「的元素的指數相對於DOM的根」是什麼意思?你能解釋一下嗎? – kapa 2011-12-24 00:22:54

+2

你必須描述你想如何計數。 DOM是分層的,而不是順序的。你想要父母+以前的兄弟姐妹或以前的兄弟姐妹+父母+父母的以前的兄弟姐妹+父母的父母+父母的父母的以前的兄弟姐妹,等等......? – jfriend00 2011-12-24 00:23:44

+1

在這個例子中,「test」元素的索引應該是什麼:http://jsfiddle.net/jfriend00/LsfQs/ – jfriend00 2011-12-24 00:26:56

回答

0

我猜你正在尋找的普遍選擇器*

//retrieve the index 
$('*').index($('button')); 
    //access the element by index 
$('*:eq('+index+')'); 
+0

看起來像這完成了我在找什麼!這是否足夠有效地在DOM中有大量節點的較大頁面上執行? – Rila 2011-12-24 00:40:19

+2

我認爲的主要問題是,索引不是識別元素的好方法。 DOM可能會改變,當節點被插入或移除時,索引將匹配不同的元素。用戶也可以自己改變DOM,例如,通過使用Greasemonkey腳本或類似的,所以我不會建議這樣做。 – 2011-12-24 00:45:45

+0

@Rila它根本沒有效率。使用ID或類,它們用於編寫選擇器。 – kapa 2011-12-24 00:47:41

0

如果你只是想在DOM唯一標識的元素,能夠回到同一個DOM元素在未來的話直接保存對元素的引用即可。您不必通過從文檔開頭算起的奇數選擇器獲取元素,只需將引用保存到實際元素即可。例如:

var lastClickedItem; 

$("div").click(function() { 
    if (lastClickedItem) { 
     $(lastClickedItem).removeClass("clicked"); 
     // do other things to the last clicked item 
    } 
    $(this).addClass("clicked"); 
    lastClickedItem = this; 
}); 

此代碼將lastClickedItem保存在全局變量中。您甚至不必將其保存在全局變量中。你可以給它一個唯一的ID或類名,並能夠使用它來檢索給定的元素。從DOM的前端算起來回到相同的元素看起來效率很低。

或者,採用獨特的類名:

$("div").click(function() { 
    $(".lastClick").removeClass("lastClick"); 
    $(this).addClass("lastClick"); 
}); 
+0

不幸的是我的用例有點古怪。當頁面在不同的瀏覽器上加載時,我需要能夠識別DOM元素。所以問題變成了,我如何**存儲一個元素的唯一引用。我的用例類似於A/B測試工具,它需要唯一地找到一個元素並對其進行修改。非常感謝您對此持續的幫助! – Rila 2011-12-24 00:54:58

+1

我放棄了。我們做了很多工作,現在只是解釋你真正想做的事情。如果您不能對文檔進行任何修改,並且您不能存儲任何元素引用,請使用低效機制。這對DOM的變化會變得很脆弱,但我不認爲你可以在這裏吃你的蛋糕和食物。 – jfriend00 2011-12-24 00:58:30

+0

你說得對,我應該更清楚地解釋我的意圖。感謝您對此的幫助,先生,非常感謝。 – Rila 2011-12-24 01:03:07