Javascript 从单元格数据获取表
所以这应该很简单,但它似乎让我绊倒了。我在桌子的一间牢房里有一个下拉列表。当该值更改时,我调用一个javascript函数,并在函数中传递该下拉列表。我怎么才能从那里拿到桌子?示例代码:Javascript 从单元格数据获取表,javascript,html,Javascript,Html,所以这应该很简单,但它似乎让我绊倒了。我在桌子的一间牢房里有一个下拉列表。当该值更改时,我调用一个javascript函数,并在函数中传递该下拉列表。我怎么才能从那里拿到桌子?示例代码: <table><tr> <td>DATA</td> <td><select id='leadState' onChange='updateData(this)'><option selected='selected' value='n
<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:ButOnChange()
如果您通过鼠标以外的其他方式浏览,则不可能使用,或者使用起来很烦人。就是这样!谢谢。是的,我添加了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')