Javascript 为什么在TR标记前面附加空格或换行符会导致它位于tbody之外?
在通过JQuery将Javascript 为什么在TR标记前面附加空格或换行符会导致它位于tbody之外?,javascript,jquery,html,html-table,append,Javascript,Jquery,Html,Html Table,Append,在通过JQuery将字符串标记附加到表中时,我遇到了一个奇怪的行为。每次我将生成的行追加为字符串时,它都被放在我的tbody之外。然后我发现了问题所在 如果我像这样附加它,效果很好: $("table").append("<tr><td>Test</td></tr>"); 有趣的是,如果我使用任何其他角色,它仍然可以正常工作这种行为有什么特殊原因吗? //在tr之前无需任何操作即可正常工作 $(“表”)。追加(“第二行”); //对任何角色都适
字符串标记附加到表中时,我遇到了一个奇怪的行为。每次我将生成的行追加为字符串时,它都被放在我的tbody
之外。然后我发现了问题所在
如果我像这样附加它,效果很好:
$("table").append("<tr><td>Test</td></tr>");
有趣的是,如果我使用任何其他角色,它仍然可以正常工作这种行为有什么特殊原因吗?
//在tr之前无需任何操作即可正常工作
$(“表”)。追加(“第二行”);
//对任何角色都适用
$(“表”)。追加(“sdfaThird行”);
//当有空格或换行符时不起作用
$(“表格”)。追加(“第四行”);
$(“表”)。追加(“\n第五行”)代码>
表tbody td{
颜色:红色;
}
第一排
该行为符合jQuery文档
.append(内容[,内容])
内容类型:htmlString或元素或数组或jQuery DOM
元素、元素数组、HTML字符串或要插入的jQuery对象
匹配元素集中每个元素的结尾
如果以
开头,则其中被标识为HTML。jQuery中有一个助手实用程序操纵目标
,用于确定将字符串附加到哪里的目标。具体而言:
function manipulationTarget( elem, content ) {
return jQuery.nodeName( elem, "table" ) &&
jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
elem.getElementsByTagName("tbody")[0] ||
elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
elem;
}
发生的情况是,当您传入一个开头带有空格的字符串时,它会创建一个文档片段,其中第一个子节点是text
节点,而不是tr
。乱七八糟的文本(sdfa
)在另一个实用方法中被删除。这些文档使用了$(“byehello”).appendTo(“body”)代码>无效。但它在我的示例中起作用(参见第三行)。为什么是空白?
function manipulationTarget( elem, content ) {
return jQuery.nodeName( elem, "table" ) &&
jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
elem.getElementsByTagName("tbody")[0] ||
elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
elem;
}