2010-10-24 116 views
1

我似乎在Mozilla和IE之間得到了fromDate的不同結果。 有沒有更可靠的跨瀏覽器的方式來做到這一點?我實際上得到不同的列值! [/編輯]dom childNodes問題

<tr id='id3332201010241' /> 
<td>20101024</td> 
<td>20101025</td> 
<td>1415</td> 
<td>1445</td> 
<td>INVDROP</td> 
<td>H4T1A3</td> 
<td><a href='#' onclick='selectEditActivity("id3332201010241");' >Click Here</a></td> 
</tr> 

function selectEditActivity(pass_id){ 
row = document.getElementById(pass_id);  
var seq = document.getElementById(pass_id).getAttribute("seq"); 
var from_date = row.childNodes[1].innerHTML; 
alert(from_date); 
var to_date = row.childNodes[3].innerHTML; 
} 
+0

你能提供的,你看到的差異的例子嗎? – 2010-10-24 18:22:36

回答

2

您正在看到不同瀏覽器處理空白的差異的結果。相反(更普遍的情況下),可以使用getElementsByTagName()肯定獲得(在這種情況下<td>)某種類型的子元素,像這樣:

function selectEditActivity(pass_id){ 
    var row = document.getElementById(pass_id), 
     cells = row.getElementsByTagName("td"), 
     seq = row.getAttribute("seq"), 
     from_date = cells[0].innerHTML, 
     to_date = cells[1].innerHTML; 
    alert("From: " + from_date + "\nTo: " + to_date); 
} 

You can test it out here。正如@patrick指出,雖然,它沒有必要在這裏,只需使用<tr>.cells,就像這樣:

function selectEditActivity(pass_id){ 
    var row = document.getElementById(pass_id), 
     seq = row.getAttribute("seq"), 
     from_date = row.cells[0].innerHTML, 
     to_date = row.cells[1].innerHTML; 
    alert("From: " + from_date + "\nTo: " + to_date); 
} 

You can test it out here

+2

因爲''有自己的'cells'屬性,所以''cells = row.getElementsByTagName(「td」)''應該可以做到這一點,就像在'row.cells [1] .innerHTML'中一樣。 – user113716 2010-10-24 18:34:07

+0

@patrick - +1 - *完全*忽略,在這裏,更新,以提供效率更高的 – 2010-10-24 18:41:05

+1

版本!感謝大家! – naimer 2010-10-24 18:41:23

3

您錯誤地作出<tr>自動關閉標籤

<tr id='id3332201010241' /> 

應該

<tr id='id3332201010241'> 

的另一件事是,當你期待,因爲它會包含文本節點childNodes可能無法正常工作。如果你想在一排<td>元素,你應該使用:

var row  = document.getElementById(pass_id); 
var columns = row.getElementsByTagName("td"); 
var from_date = columns[1].innerHTML; 
var to_date = columns[3].innerHTML; 

的的childNodes節點列表包括 元素的所有子節點,包括 (空)文本節點和 註釋節點。 @quirksmode