2012-07-09 166 views
0

我有一個HTML網頁摘要如下:訪問下一個兄弟

<tr><td></br></td></tr> 
<tr title="title"><td></td><td>凝固検査専用容器</td></tr> 
<tr id='map_6011' /> 
<tr id='map_6012' /> 
<tr id='map_6010' /> 
<tr id='map_6184' /> 
<tr id='map_6336' />  
<tr><td></br></td></tr> 

<tr title="title"><td></td><td>血糖専用容器(NaF入り)</td></tr> 
<tr id='map_2055' /> 
<tr id='map_3471' />  
<tr><td></br></td></tr> 

<tr title="title"><td></td><td>アンモニア専用容器</td></tr> 
<tr id='map_2142' /> 

首先,我要選擇標題爲「標題」每個TR標籤,並特別TR標籤,然後第一個兄弟(即下一個。 TR的ID爲'map_xxxx')。

我有我的JavaScript是這樣的:

var lblTRs=$("tr[title=title]"); 
for(var i=0;i<lblTRs.length;i++){ 
    var obj=lblTRs[i]; 
    var firstTRSibling=obj.nextSibling; 
    alert(firstTRSibling); //this gives [object Text] 
} 

但它沒有給出實際的TR sibling.The警報()給出[對象文本。

我在這裏做錯了什麼?

+0

爲什麼不使用obj.next(); – mfadel 2012-07-09 08:12:57

回答

4

嘗試是這樣的:

var firstTRSibling; 
while((firstTRSibling=obj.nextSibling).nodeType !== 3){ 
               // ^-----indicates TEXT_NODE 
    obj=obj.nextSibling; 
} 
alert(firstTRSibling); 

你有DOM元素之間多餘的空格字符,他們將視爲文本節點。

0

好吧,我應該使用

var firstTRSibling=obj.nextSibling.nextSibling; 

但爲什麼_

+0

如果您的HTML在節點之間有空白區域,您將看到文本節點爲nextSibling。正如@Engineer所回答的那樣,您需要檢查nodeType以確保它是一個元素而不是文本節點。 – steveukx 2012-07-09 08:12:09

1

我想你可以簡單地使用next

$("tr[title='title']").each(function() { 
    var element = $(this).next(); 
}); 

BTW,<tr>應該有結束標記(即</tr>),也包含內部的<td></td>標籤指定的號碼。

0

因爲你已經在使用jQuery,我建議使用jQuery內置的next函數。

這可能是財產以後像var lblTRs=$("tr[title=title]").next("tr");

1

你的問題是,每對<tr>元件之間的空白空間被表示爲DOM中的文本節點。但是,表格相關元素的表面上很少有人知道,因此很容易處理這個問題。具體而言,在這種情況下,<table>元素的rows屬性和<tr>元素的rowIndex屬性。假設你有存儲在一個名爲tr變量<tr>元素,你需要的是:

tr.parentNode.rows[tr.rowIndex + 1]; 

這適用於所有主要的瀏覽器回到IE 4,是DOM標準的一部分。它比使用jQuery或其他庫更快,更兼容。

+0

謝謝你..完美的工作... – 2012-07-09 08:39:32