Javascript 为什么在TR标记前面附加空格或换行符会导致它位于tbody之外?

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之前无需任何操作即可正常工作 $(“表”)。追加(“第二行”); //对任何角色都适

在通过JQuery将
字符串标记附加到表中时,我遇到了一个奇怪的行为。每次我将生成的行追加为字符串时,它都被放在我的
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;
}