问题描述
我在通过JQuery向表中附加<tr>
字符串标记时遇到了一种奇怪的行为。
每次我添加我生成为字符串的行时,它都被放在我的tbody
之外。
然后我发现了这个问题。
如果我像这样追加它,它工作正常:
$("table").append("<tr><td>Test</td></tr>");
但是,如果我在<tr>
之前添加一个空格或换行符,它会将该行追加到tbody
之外。
$("table").append(" <tr><td>Test</td></tr>");
$("table").append("\n<tr><td>Test</td></tr>");
有趣的是,如果我使用任何其他角色,它仍然可以正常工作。 这种行为有什么特别的原因吗?
//Works fine without anything before the tr $("table").append("<tr><td>Second row</td></tr>"); //Works fine also with any character $("table").append("sdfa<tr><td>Third row</td></tr>"); //Doesn't work when there's an whitespace or newline $("table").append(" <tr><td>Fourth row</td></tr>"); $("table").append("\\n<tr><td>Fifth row</td></tr>");
table tbody td { color: red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <table> <tr> <td>First row</td> </tr> </table>
1楼
有一个在jQuery的,一个辅助工具manipulationTarget
,它确定target
为,其中中添加字符串。
特别:
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;
}
当你在开头传入一个带有whitespace
的字符串时会发生什么,它会创建一个文档片段,其中第一个子节点是text
节点,而不是tr
。
在另一种实用方法中删除了乱码文本( sdfa
)。
2楼
这种行为是根据jQuery文档
.append(内容[,内容])
content类型: htmlString或Element或Array或jQuery DOM元素 , 元素数组,HTML字符串或jQuery对象,用于插入匹配元素集中每个元素的末尾。
如果以<tag ... >
开头,则将其标识为HTML