Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自TD的Javascript访问TR_Javascript_Html_Dom - Fatal编程技术网

来自TD的Javascript访问TR

来自TD的Javascript访问TR,javascript,html,dom,Javascript,Html,Dom,我有一个表行,其中有一个td(无论它代表什么)。我想在不使用ID或名称的情况下更改TR my TD所在的类属性。就像这样: <tr> <td onclick="[TR].setAttribute('class', 'newName')">My TD</td> </tr> 我的TD 如何操作?可能是最简单的方法,您可以使用选择器,例如: $('table.mytable tr').addClass('red'); 向table.myt

我有一个表行,其中有一个td(无论它代表什么)。我想在不使用ID或名称的情况下更改TR my TD所在的类属性。就像这样:

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

我的TD
如何操作?

可能是最简单的方法,您可以使用选择器,例如:

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

向table.mytable中的所有tr添加一个“red”类。这只是冰山一角-看看它,它应该可以满足您的需要。

在jquery中,如果您有td的参考,它将非常简单:

$(this).closest('tr');
如果你真的不想依赖jQuery,那么你可以做一个循环,获取parentNode并检查它的类型,作为一个更通用的解决方案。在这种情况下,您可以只获取parentNode,因为tr始终是td的直接父节点。您可以执行类似的操作(注意,此操作未经测试):


如果可以使用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;
}

我的TD
函数更改类(元素,类)
{
elem.parentNode.className=类;
}

无需任何额外框架:

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

如果您在javascript中有dom元素,那么可以使用.parentNode(),它将为您提供父节点,应该是表行。然后可以设置。className

td
代表表数据

现在。。在本例中,您需要
td
parentNode
属性

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

我的TD
或者正如博宾斯在评论中所暗示的那样

<td onclick="this.parentNode.className= 'newName'">My TD</td>
我的TD

+1用于解决不使用ID(如有问题的请求)或依赖JqueryPERFECT的问题!表格数据。。。我懂了。谢谢大家!<代码>设置属性('class')在IE6-7中无法正常工作。IE有很多错误的属性:因此避免HTML文档中的
getAttribute
/
setAttribute
。相反,请使用DOM级别1 HTML属性:
this.parentNode.className='newName'
更兼容、更可读。谢谢您的支持。我敢说,我觉得IE简单地凌驾于标准之上是非常恼人的^^@arik so-这并不是凌驾于标准之上,而是一个简单的bug。它在IE8中是固定的。这不是基于td的。你会意识到,如果你有HTML,那么所有这些共享同一个父级,它们不会嵌套在彼此下面。他们是兄弟姐妹。是的,我修正了答案以注意我的是一个更通用的脚本。应该是parent.nodeName==“TR”,而不是parent.nodeName=“TD”
标记名
/
nodeName
比较应该始终不区分大小写(即
nodeName.toLowerCase()==“TR”
),你不应该依靠浏览器来改变情况。我真的不确定当你有一个
时,查找祖先列表的意义是什么:它的直接父对象总是
@thecoshman:这不会发生。浏览器为您“修复”表格,使
内,而不管您的输入是什么。不同的浏览器可能会对无效的输入应用不同的修复(这就是为什么您不应该依赖它),但是警告
innerHTML
,您将看到正确的预期嵌套。这实际上根本没有回答问题。你基本上只是告诉他去查一下如何使用jQuery。一点用处也没有。令人惊讶的是,jQuery有多少答案都是直接的(尽管这是在普通的旧DOM中最简单的事情),但语法仍然错误!这是因为在给出一些问题后答案已经更改。在javascript中,答案只是:document.getElementById(“sometItem”).parentNode.style.background='#77dd77';什么?OP希望设置类而不是样式的某个部分。
<td onclick="this.parentNode.className= 'newName'">My TD</td>