Javascript 解析时,jQuery会忽略任何与';t表格和文档将删除表格标记
不确定这是错误还是功能。当解析带有表元素的html时,jQuery会忽略非表元素Javascript 解析时,jQuery会忽略任何与';t表格和文档将删除表格标记,javascript,jquery,dom,html-table,Javascript,Jquery,Dom,Html Table,不确定这是错误还是功能。当解析带有表元素的html时,jQuery会忽略非表元素 <tr><td>table data</td></tr> <div>div after will be ignored</div> 将相同的html传递到纯javascriptelement.innerHTML=html时 <tr><td>table data</td></tr> table
<tr><td>table data</td></tr>
<div>div after will be ignored</div>
将相同的html传递到纯javascriptelement.innerHTML=html
时
<tr><td>table data</td></tr>
table data
<div>div after will be ignored</div>
表格数据
之后的div将被忽略
在这里,它正在发挥作用
编辑:发布这篇文章之后,我意识到jQuery正在删除表元素,因为dom中的行为正好相反 首先,这不是一个有效的HTML 对。Jquery解析器将清除这些 如果仔细查看jquery,html函数在实际设置
innerHTML
之前使用parseHTML
而parseHTML正在调用一个buildFragment并删除字符串中的所有虚假元素
下面是buildFragment函数源代码的一部分
// Add nodes directly
if ( jQuery.type( elem ) === "object" ) {
jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
// Convert non-html into a text node
} else if ( !rhtml.test( elem ) ) {
nodes.push( context.createTextNode( elem ) );
// Convert html into DOM nodes
} else {
tmp = tmp || safe.appendChild( context.createElement( "div" ) );
// Deserialize a standard representation
tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
wrap = wrapMap[ tag ] || wrapMap._default;
tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
// Descend through wrappers to the right content
j = wrap[ 0 ];
while ( j-- ) {
tmp = tmp.lastChild;
}
// Manually add leading whitespace removed by IE
if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );
}
// Remove IE's autoinserted <tbody> from table fragments
if ( !support.tbody ) {
// String was a <table>, *may* have spurious <tbody>
elem = tag === "table" && !rtbody.test( elem ) ?
tmp.firstChild :
// String was a bare <thead> or <tfoot>
wrap[ 1 ] === "<table>" && !rtbody.test( elem ) ?
tmp :
0;
在每个标签的内部
<!ELEMENT THEAD - O (TR)+ -- table header -->
<!ELEMENT TFOOT - O (TR)+ -- table footer -->
如您所见,不允许直接使用div标记
然而,对于香草javascript,不会发生这种解析,浏览器直接解释提供给dom节点的字符串,并将其添加到文档中
删除元素的所有子元素,解析内容字符串并将结果节点指定为元素的子元素
<!ELEMENT THEAD - O (TR)+ -- table header -->
<!ELEMENT TFOOT - O (TR)+ -- table footer -->