2010-05-26 26 views
2

我目前有一個網站源代碼(無法控制源代碼),它包含需要操作的某些內容。這在表面上很簡單,但是標籤中沒有唯一的ID屬性可以唯一標識,因此可以進一步遍歷。使用JQuery遍歷DOM結構,在HTML'comment'後找到一個特定的<table>元素

以下是源代碼的一小部分,圍繞相關標記。

... 
    <td width="100%"> 

    <!--This table snaps the content columns(one or two)--> 

    <table border="0" width="100%"> 
    ... 

本質上說,HTML註釋伸出作爲一種簡單的方法來訪問該元素。使用JQuery comment add-onthis questionand some help from snowlord comment below,我已經能夠識別的註釋和檢索使用「轉儲」擴展以下輸出。

$('td').comments().filter(":contains('This table snaps the content columns(one or two)')").dump(); 

返回;

jQuery Object { 
    0 = DOMElement [ 
     nodeName: DIV 
     nodeValue: null 
     innerHTML: [ 
      0 = String: This table snaps the content columns(one or two) 
     ] 
    ] 
} 

但是我不確定如何遍歷DOM中的兄弟元素。

這應該很簡單,但我沒有太多的JQuery選擇器經驗。任何建議表示讚賞。

+0

兄弟姐妹的方法沒有工作嗎?你到底想做什麼?如果你想在每張桌子上調用一個函數,你可以在上面的結果中調用sinlings('table'),然後調用每個(yourfunction):'... siblings('table')。each(yourfunction)' – 2010-05-26 09:41:11

+0

啊,我明白了,也許評論插件在幕後做了一些邪惡的魔術,使得用普通的jQuery代碼無法繼續。 – 2010-05-26 09:43:26

+0

在我的回答下查看我的最新評論... – 2010-05-26 10:26:25

回答

1

我想你可以使用siblings方法:

$('td').comments().siblings('table').yourcode... 

從文檔:

如果提供的jQuery代表了一組DOM元素,在.siblings()方法允許我們搜索DOM樹中這些元素的同胞,並從匹配元素中構建一個新的jQuery對象。

該方法可以選擇接受 選擇器表達式,我們可以將其傳遞給$()函數,該選擇器表達式的類型爲 。 如果選擇器被提供時, 元件將通過測試 它們是否匹配它被過濾。

+0

也許不完全是上面的代碼,因爲這將讓那些兄弟姐妹任何評論所有表。 – 2010-05-26 08:15:47

+0

嗯,不幸的是有一個兄弟作爲註釋的多個實例?表有什麼辦法,當我傾倒的意見(我可以過濾評論()由它們所包含的文本例如)陣列,有幾個屬性與.innerHTML - ?包含文本,我可以通過篩選思考 – 2010-05-26 09:03:04

+1

是的,嘗試':contains'選擇:http://api.jquery.com/contains-selector/你會使用這樣的:'$( 「TD」)評論()過濾器(「:包含(「文本」)「)。兄弟姐妹(‘表’)。yourcode ...' – 2010-05-26 09:19:31

0

如果您完全可以控制此代碼,請在表格中添加一個ID。

如果你必須做一些討厭,也許你可以使用

var tables = $("table"); 

要獲得所有表,然後確定由索引問題表...

$(tables[5]).css("color", "aqua"); 

該儘快打破作爲表添加或刪除,但如果你不能添加一個id到表,它似乎是一個潛在的選擇。

+0

我會_love_在桌子上放一個ID :) 不幸的是我沒有任何控制代碼:( 我想避免硬編碼儘可能多(如你所說,它將打破未來表的更改)。感謝您抽出寶貴的時間雖然發表評論! – 2010-05-26 08:48:42