2012-12-15 35 views
1

我遇到了html DOM的問題。如何獲取html元素的絕對DOM路徑

我如何從這個路徑獲得的價值:

html body div table tbody tr td table tbody tr td table tbody tr td table tbody tr td form table tbody tr td

我只能找到這樣的東西getElementbyID/tag/name/class

如何獲得絕對的DOM元素td的「路徑」 (假設該表中第二行的第三個單元格)? 我一直在尋找,但無法找到一個簡單的答案沒有ID /類等涉及。

+0

爲什麼你不能使用ID? –

+0

我不使用ID的原因是因爲我正在編寫一個asp.net頁面的腳本,並且ID不是靜態的,而是經常改變,所以這就是我不能使用ID的原因 –

+0

這是一些瀏覽器遊戲,我想使某些東西自動化 –

回答

1

你可以使用querySelector(),but it doesn't have great support ...

var elem = document.querySelector('html body div table tbody tr td table tbody tr td table tbody tr td table tbody tr td form table tbody tr td'); 

否則只使用一個庫,允許您使用CSS選擇器,如jQuery。

var $elem = $('html body div table tbody tr td table tbody tr td table tbody tr td table tbody tr td form table tbody tr td'); 

順便說一句,在選擇這樣對性能可怕。絕對可怕。請閱讀CSS selectors以瞭解原因。

+0

感謝您的快速回答我apreciate,我會通知我自己jquery :) –

0

首先,考慮你是否確實需要完整路徑。參考ID或類更加健壯,因爲它們具有較少的移動部分。

如果完整路徑是您需要的,您可能希望使用XPath,因爲它專門用於按路徑查找元素。

這是simple cross browser XPath library - 還有很多其他的。

0

看起來你可能想是這樣的:「接我」

對於下面的示例HTML,

<html> 
    <head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
    <script src="findit.js"></script> 
    </head> 
    <body> 
    <div id="header"> 
     <h1>Welcome to my ASP.net site!</h1> 
    </div> 
    <div id="h440292"> 
     <table> 
     <!-- tbody omitted, but some (all?) browsers add it --> 
     <tr> 
      <td>junk</td> 
      <td>junk</td> 
      <td>junk</td> 
     </tr> 
     <tr> 
      <td>junk</td> 
      <td>junk</td> 
      <td>pick me!</td> 
     </tr> 
     </table> 
    </div> 
    </body> 
</html> 

這個jQuery代碼會發現說,細胞

$(function() { 
    var $resultCell = $("body") 
     .children("div").eq(1) 
     .children("table") 

     // Note I have to add this even though 
     // I omitted the tbody in the HTML markup 
     .children("tbody") 
     .children("tr").eq(1) 
     .children("td").eq(2); 
    alert($resultCell.text()); 
}); 

如果性能成爲問題,您可能需要訴諸於使用本地DOM方法做類似的事情。