javascript - 从单元格数据中获取表格

标签 javascript html

所以这应该很简单,但它似乎让我绊倒。我在表格的单元格中有一个下拉菜单。当该值更改时,我调用一个 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>

JavaScript:

function updateData(select) {
    var table = select.parentNode.parentNode.parentNode;
    var row = select.parentNode.parentNode;
    var cell = select.parentNode;
}

为什么这不能正确返回表格?

最佳答案

因为您忘记了 tbody 元素(该元素是可选的,但大多数(如果不是全部)浏览器都会添加到 table包装 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;
}

JS Fiddle demo .

而且您实际上不必为每个变量遍历:

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

JS Fiddle demo .

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

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);
}

JS Fiddle demo .

关于javascript - 从单元格数据中获取表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17433353/

相关文章:

javascript - 如何扩展对象的原型(prototype)并在全局范围内具有相同的功能?

android - 具有捕获和接受属性的 HTML 文件输入控件工作错误?

javascript - 页面加载时平滑的颜色过渡

javascript - 在 css 中将图像移到顶部

javascript - Angular CLI - 图像在 'ng build' 之后不显示

javascript - 生成具有完整 rgb 空间的 Canvas 颜色选择器

javascript - 在 IE 中 <a> 中垂直和水平居中 <img> 的麻烦

javascript - Firefox 扩展保存数据的正确方法

javascript - req.body 检查是否包含特定字符

javascript - 进入子菜单网络链接后,保持父菜单项突出显示