2012-04-11 56 views
0

訪問HTML選擇元素,我有以下的HTML片段這是內部表TD

<table> 
    <tr> 
     <td><select name="day"> 
     </select></td> 
     <td><select name="time"> 
     </select></td> 
     <td><select name="closed" onchange="dosomething(this)"> 
     </select></td> 
    </tr> 
</table> 

當我改變的東西,那麼我想獲得一個句柄,做它的一些操作。我如何獲得在JavaScript中的句柄?

function closedChanged(object) 
{ 
    try 
    { 
     var parent=object.parentNode.parentNode; 
     var day = parent.getElementsByName("day")[0]; 
    } 
    catch(e) 
    { 
     alert(e); 
    } 
} 

這裏我得到的錯誤說HTMLTableRowElement沒有辦法叫getElementsByName。任何其他方式?

+0

你的問題似乎有點搞砸了。這看起來像你得到的是tr元素而不是select。我想你會更好地使用jquery。現在,你究竟想要做什麼? – Timmerz 2012-04-11 20:22:49

回答

1

你也可以嘗試讓所有選擇元素,通過他們的循環,並檢查他們的名字:

var parent = obj.parentNode.parentNode; 
var selects = parent.getElementsByTagName("select"); 
for (var i = 0; i < selects.length; i++) { 
    if (selects[i].name == "day") { 
     // selects[i] is the target 
    } 
} 

我敢肯定,這類似於document.getElementsByName()不會,但不是通過標籤搜索第一。

+0

這對我來說非常合適。 – user1241438 2012-04-11 20:54:57

+0

很高興工作!請記住,如果您有多個名稱爲「day」(或其他)的元素,則for循環不會在找到的第一個元素處停止。如果你希望它在第一個找到的地方停止搜索,就把「break」在if語句結尾處。這可能是不必要的,因爲你有一個小部分,可能不會有多個具有相同的名稱,但它可以減輕一些額外的處理。 – Ian 2012-04-11 21:11:07

0

getElementsByName()方法訪問具有指定名稱的所有元素。

正如你給每個選擇不同的名稱,你可以直接訪問它。

var x=document.getElementsByName("day"); 

無需父

2

的對於這個特定的問題,不應該由它的名字訪問DOM元素,而應該通過其ID訪問它們。

foo = document.getElementById("someID"); //Its unique