为什么是n't '元素a <td/>元素
Why isn't lastChild of a <tr/> element a <td/> element?
我正在写一个userscript来重新格式化一个表,我遇到了一些我不理解的东西。简而言之,当我请求一个元素的lastChild时,我得到的是文本,而不是我所期望的行中的最后一个。我用错lastChild了吗?
html是这样的:
<tbody id="questions">
<tr class="drag-row" id="drag-row-4819" style="cursor: auto; left: 268.34375px;">
<td style="background-color: #eee; text-align: center; ;"><small class="muted">Page 1</small></td>
<td style="width:15px;"></td>
<td class="text-right" style="width:35px;">1</td>
<td>Do you want to fill out the priority list?</td>
<td style="width:150px;">Multiple choice (only one answer)</td>
<td>
<a href="/customers/4/accounts/2/portals/211/forums/Forum_577/issues/Issue_2797/survey_questions/4819">Edit</a>
<a data-confirm="WARNING: Are you sure you want to delete this question?" data-method="delete" href="/customers/4/accounts/2/portals/211/forums/Forum_577/issues/Issue_2797/survey_questions/4819" rel="nofollow">Delete</a>
</td>
</tr>
etc., more <tr/> elements here
我试图将"删除"链接从每行的最后一个元素分离到每行末尾的新元素。
我的userscript代码是这样的
var rows = document.getElementById("questions").children,
separateDeleteLink = function(row) {
var deleteCell = row.children[row.children.length - 1];
if (deleteCell.children.length == 2) {
var deleteLink = deleteCell.children[1];
console.log(deleteLink);
row.appendChild(document.createElement("td")).appendChild(deleteLink);
}
};
[].forEach.call(rows, separateDeleteLink);
对于某些行,例如var deleteCell = row.children[row.children.length - 1]
,我真的更喜欢写var deleteCell = row.lastChild
。但是当我这样做的时候,它不起作用。console.log(row.lastChild)
返回一个名为#text的对象。
您正在寻找row.lastElementChild
。
注意DOM是由节点组成的。节点不仅是元素,还包括空格、文本和其他您可能不想处理的垃圾。
你错过的是,你的源代码很好,缩进和人类可读的事实,导致你在你的DOM中有所有这些文本节点的所有那些制表符和换行符之间的标记。
这就是为什么.lastChild()
返回一个文本节点-它实际上是关闭</tr>
标记之前的最后一个节点。
如果你想知道,这不是足够的理由来删除漂亮的格式。您只需要使用.lastElementChild
(如@Entity Black所建议的)或.children[x.children.length - 1]
(如您一直在做的那样)来编写代码,以确保您只获得一个元素,而不是一个节点。
相关文章:
- 如何在td元素中添加监听器
- 如何首先设置样式<td>表中包含在窗体中的元素
- 使用querySelector()获取最后一个td元素
- 更改<td>更改事件的元素值
- 使用 Jquery 选择一个 td 元素
- 将图像附加到没有 id 或值的 td 元素
- 除了最后一个<td>元素-Jquery
- td元素中带有传递参数的Javascript函数
- 将内联块元素居中,并在 td 内部使用链接
- 如何在点击tr的td后获取tr的id's元素
- 事件点击不在td元素中的多个锚点标记上处理同一个类
- 浏览器中的javascript和td元素事件属性
- 正在获取循环中td元素的tr id
- Jquery:选择tr元素的第二个td
- 正在查找表行中的td元素位置
- 使用setAttribute将id设置为元素最后一行的td
- 无法动态设置表的 td 元素的值
- td 元素上的 OnClick 函数返回第一列值和标头值
- td内部元素td的php-id
- 我需要什么CSS规则来隐藏"其子元素"td"'有子元素"input&qu