特别注意,在Safari浏览器中是不支持把一个DOM Node直接append到另一个DOM Node上的,不然会抛出JS异常。解决方案,是拷贝Node下所有节点到另一Node上,相关函数如下:
function copyNodes( nodeTo, nodeFrom )
{
if( !nodeTo || !nodeFrom )
return;
var ownerDoc = (nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument);
var nodes = nodeFrom.childNodes;
if( ownerDoc.importNode )
{
for( var i=0; i < nodes.length; i++ )
{
nodeTo.appendChild( ownerDoc.importNode( nodes[i], true ) );
}
}
else
{
for( var i=0; i < nodes.length; i++ )
{
nodeTo.appendChild( nodes[i].cloneNode( true ) );
}
}
}
所以在调用时可以针对Safari浏览器做特别处理,例如:
if( BrowserUtility.isSafari( ) )
{
copyNodes( dataTo, dataFrom );
}
else
{
dataTo.appendChild( dataFrom.documentElement );
}
function copyNodes( nodeTo, nodeFrom )
{
if( !nodeTo || !nodeFrom )
return;
var ownerDoc = (nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument);
var nodes = nodeFrom.childNodes;
if( ownerDoc.importNode )
{
for( var i=0; i < nodes.length; i++ )
{
nodeTo.appendChild( ownerDoc.importNode( nodes[i], true ) );
}
}
else
{
for( var i=0; i < nodes.length; i++ )
{
nodeTo.appendChild( nodes[i].cloneNode( true ) );
}
}
}
所以在调用时可以针对Safari浏览器做特别处理,例如:
if( BrowserUtility.isSafari( ) )
{
copyNodes( dataTo, dataFrom );
}
else
{
dataTo.appendChild( dataFrom.documentElement );
}