2010-03-26 74 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