2010-03-26 31 views
11

我有一個表格行,其中有一個td(無論它代表什麼)。我想改變TR的TD類屬性,而不使用ID或名稱。像這樣:來自TD的Javascript訪問TR

<tr> 
    <td onclick="[TR].setAttribute('class', 'newName')">My TD</td> 
</tr> 

我該怎麼做?

+2

​​標記是表數據 – thecoshman 2010-03-26 15:21:12

+2

令人驚訝的是許多答案也水漲船高straigh t for jQuery(儘管這是即使在普通的舊DOM中最簡單可能的事情),然後仍然是語法錯誤! – bobince 2010-03-26 17:24:41

+0

這是因爲在給出一些問題後答案已經改變。 – Joop 2010-03-29 05:51:09

回答

27

td代表表數據..

現在..你的情況,你所需要的tdparentNode屬性..

<tr> 
<td onclick="this.parentNode.setAttribute('class', 'newName')">My TD</td> 
</tr> 

或bobince在他的建議評論

<td onclick="this.parentNode.className= 'newName'">My TD</td> 
+0

+1用於解決使用ID(如問題請求)或依靠Jquery – thecoshman 2010-03-26 15:26:31

+0

完美! 表格數據...我明白了。謝謝! – arik 2010-03-26 16:16:13

+6

'setAttribute('class')'在IE6-7中無法正常工作。出現這種情況的原因有很多,IE瀏覽器出錯了:避免在HTML文檔中使用'getAttribute' /'setAttribute'。相反,使用DOM級別1的HTML屬性:'this.parentNode.className ='newName''更具兼容性和可讀性。 – bobince 2010-03-26 17:22:13

-3

jQuery大概是這樣,您就可以使用選擇,如最簡單的方法:

$('table.mytable tr').addClass('red'); 

要table.mytable一類的「紅色」的添加到所有TR的。這只是冰山一角 - 請檢查它應該做你需要的。

$(this).closest('tr'); 

如果你真的不想承擔jQuery的依賴,那麼你可能只是做一個循環獲取:

+0

這實際上並沒有回答這個問題。你基本上只是告訴他去看看如何使用jQuery。沒有用處。 – 2010-03-26 15:31:43

11

在jQuery的,如果你有關於你的TD這將是非常簡單的parentNode並將其檢查爲更通用的解決方案。在這種情況下,你可以獲得父節點,因爲tr總是td的直接父節點。你可以做這樣的事情(注意,這是未測試):

var parent = myTd.parentNode; 
while(true) { 
    if(parent == null) { 
    return; 
    } 
    if(parent.nodeName === "TR") { 
    return parent; 
    } 
    parent = parent.parentNode; 
} 
+0

你就會意識到,如果你有HTML ​​​​​​那麼所有這些​​共享相同的父母,他們不嵌套在彼此。他們是兄弟姐妹。 – thecoshman 2010-03-26 15:28:59

+0

是的,我確定答案注意我的是一個更通用的腳本。 – 2010-03-26 15:29:48

+0

應該是parent.nodeName ===「TR」而不是父級。nodeName =「TD」 – Ms2ger 2010-03-26 16:21:00

0

如果你可以使用jQuery它可能是這樣的

$("yourtdselector").closest("tr").attr("class","classname"); 

爲您的代碼

<tr> 
    <td onclick="changeClass(this,'classname')">My TD</td> 
</tr> 

function changeClass(elem, class) 
{ 
    elem.parentNode.className = class; 
} 
-3

無任何額外的框架:

document.getElementById("theTableName").rows[1].cells[1].className = "someclassname"; 
+2

這不是基於td得到的。 – 2010-03-26 15:27:08

1

如果你在javascript中有dom元素,你可以使用.parentNode()然後它會給你perant節點,這應該是錶行。然後就可以設置.className

+3

它實際上是parentNode。 – 2010-03-26 15:33:13

+0

謝謝,更新。 – thecoshman 2010-03-29 09:51:18

+0

在javascript中它只是:** document.getElementById(「someTDitem」)。parentNode.style.background ='#77dd77'; ** – Fattie 2014-01-20 17:14:52