fix edge case in singleton node creation

This commit is contained in:
Hakim El Hattab 2014-05-07 22:02:05 +02:00
parent f31f0ffa70
commit c4e202cd0f
1 changed files with 16 additions and 8 deletions

View File

@ -518,18 +518,26 @@
*/ */
function createSingletonNode( container, tagname, classname, innerHTML ) { function createSingletonNode( container, tagname, classname, innerHTML ) {
var node = container.querySelector( '.' + classname ); // Find all nodes matching the description
var nodes = container.querySelectorAll( '.' + classname );
// If no node was found or the node is inside another container // Check all matches to find one which is a direct child of
if( !node || node.parentNode !== container ) { // the specified container
node = document.createElement( tagname ); for( var i = 0; i < nodes.length; i++ ) {
node.classList.add( classname ); var testNode = nodes[i];
if( typeof innerHTML === 'string' ) { if( testNode.parentNode === container ) {
node.innerHTML = innerHTML; return testNode;
} }
container.appendChild( node );
} }
// If no node was found, create it now
var node = document.createElement( tagname );
node.classList.add( classname );
if( typeof innerHTML === 'string' ) {
node.innerHTML = innerHTML;
}
container.appendChild( node );
return node; return node;
} }