2012-09-10 41 views
0

我有一個包含嵌套的表的HTML:如何找到一個祖先元素,並查詢其元數據

<table .... 
<tbody ... 
<tr ... 
    <td class="Field">item1_1</td> 
     <td class="Value"> 
     <table ... 
     <tbody... 
     <tr 
      <td class="Field">0</td> 
      <td class="Value"> 
      <table ... 
       .... 

的可點擊的元素是字段。當用戶點擊一個字段時,我需要找到包含其表格的表格(2個表格)並檢查其元數據。 我試着使用:

field.parents("table")[1] 

這將返回右表,但它不允許我去查詢它的元數據:

field.parents("table")[1].data("isArray") 

能否請你幫我找出如何查詢的元數據包含表?

感謝, 李

附: 我只設法通過做:

field.parent().parent().parent().parent().parent().parent().parent().parent().data("isArray") 

,但我真的想避免這種醜陋。

+0

不想問,但你有沒有考慮使用像jQuery的或的Zepto,以幫助你在這找到了嗎? – tkone

+0

您似乎正在使用jquery,儘管您沒有如此標記問題。如果您使用的是jQuery,並希望獲得與jQuery相關的答案,請修改您的標籤。 –

+0

@tkone'.parent()','.parents()'和'.data()'是jQuery方法。'=]' –

回答

2

你遇到的問題是數組索引jquery對象將返回一個dom對象。你可以改爲使用eq來爲你提供一個jQuery對象。

field.parents("table").eq(1).data("isArray") 

如果你能修改html。一個更清潔的方法是將一個班級分配給你想要學習的班級,然後使用closest

field.closest(".someClass").data("isArray") 
1

見此通話

field.parents("table")[1].data("isArray")

我假設你使用jQuery.data()方法。 如果是,那麼按索引調用將返回一個HTMLElement而不是jQuery對象。 在這種情況下,改變你的代碼,以

$(field.parents("table")[1]).data("isArray")

1

eq()將解決這個問題,但爲了簡單起見,你可以指定一個id外部表,並創建到table參考只需一次,無需要在每次用戶點擊時找到它。

同時認爲,eq()使用可能會造成一些mantainance問題,如果你再窩在你的另一個表/ s的領域,因爲你完全依賴由parents()返回的集合的索引檢索最外層的表

否則,如果該表是唯一一個與內嵌data-*屬性,你可以用

field.closest('table[data-isArray]'); 
+0

我曾假設這是用於多個單獨的表格(不知道爲什麼)。如果這是一個靜態表,那麼這絕對是最好的方法。 –

相關問題