Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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/3/html/85.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
Javascript 从单元格数据获取表_Javascript_Html - Fatal编程技术网

Javascript 从单元格数据获取表

Javascript 从单元格数据获取表,javascript,html,Javascript,Html,所以这应该很简单,但它似乎让我绊倒了。我在桌子的一间牢房里有一个下拉列表。当该值更改时,我调用一个javascript函数,并在函数中传递该下拉列表。我怎么才能从那里拿到桌子?示例代码: <table><tr> <td>DATA</td> <td><select id='leadState' onChange='updateData(this)'><option selected='selected' value='n

所以这应该很简单,但它似乎让我绊倒了。我在桌子的一间牢房里有一个下拉列表。当该值更改时,我调用一个javascript函数,并在函数中传递该下拉列表。我怎么才能从那里拿到桌子?示例代码:

<table><tr>
<td>DATA</td>
<td><select id='leadState' onChange='updateData(this)'><option selected='selected' value='new'>New</option><option value='old'>Contacted</option></select></td>
</tr>
</table>

为什么不能正确返回表?

因为您忘记了
tbody
元素(这是可选的,但大多数(如果不是全部的话)浏览器都会添加到
表中以包装
tr
元素。请尝试另一个
parentNode

function updateData(select) {
                // select -> td  -> tr      -> tbody   -> table
    var table = select.parentNode.parentNode.parentNode.parentNode;
    var row = select.parentNode.parentNode;
    var cell = select.parentNode;
}

实际上,您不必为每个变量遍历

function updateData(select) {
    var td = select.parentNode,
        tr = td.parentNode,
        tbody = tr.parentNode,
        table = tbody.parentNode;
}

假设您希望坚持使用纯JavaScript,并且不希望在检索元素时手动迭代DOM,下面是一个简单的
最近()的纯JavaScript实现


大卫·托马斯的答案可能是最好的答案。 虽然如果页面上有jQuery,也可以使用“closest()”函数

$(select).closest('table')

这将考虑自动添加tbody容器的浏览器和不添加tbody容器的浏览器。

OT:But
OnChange()
如果您通过鼠标以外的其他方式浏览,则不可能使用,或者使用起来很烦人。就是这样!谢谢。是的,我添加了tr和td变量只是为了显示我对如何使用table变量的想法。实际上我没有使用它们。您确实非常欢迎,我很高兴能够提供帮助!我添加了一个(非常)简单实现jQuery的
closest()
方法,以保存对DOM的手动检索导航/遍历。我实际上也在使用jQuery,我不知道closest(),因为我上周刚开始做web开发。我将研究如何使用它。
HTMLElement.prototype.closest = function (selector) {
    var self = this.length ? this[0] : this;
    while (self.tagName.toLowerCase() !== selector.toLowerCase() && self.tagName.toLowerCase() !== 'body') {
        self = self.parentNode;
    }
    return self.tagName.toLowerCase() == 'body' ? this : self;
}

function updateData(select) {
    var td = select.closest('td'),
        tr = select.closest('tr'),
        table = select.closest('table');
    console.log(td, tr, table);
}
$(select).closest('table')