davesmiths
3/9/2015 - 4:55 PM

closest shared ancestor jquery javascript js

closest shared ancestor jquery javascript js

// Please forgive the rough cut and paste and lack of comments :)

// Set $els and get $closestSharedAncestor jQuery object at the bottom
$els;

// Get the closest common ancestor
var	$closestSharedAncestor,
	ancestorsArray,
	longestAncestorBranch,
	ancestorsArrayLength,
	ancestorDiffers,
	i,
	j;


ancestorsArray = [];
longestAncestorBranch = 0;
$els.each(function() {
	var $ancestors,
		ancestorsLength;
	
	$ancestors = $(this).parents();
	ancestorsLength = $ancestors.length;
	
	if (ancestorsLength > longestAncestorBranch) {
		longestAncestorBranch = ancestorsLength;
	}
	
	ancestorsArray.push($ancestors.get().reverse());
	
});
ancestorsArrayLength = ancestorsArray.length;

$closestSharedAncestor = ancestorsArray[0][0];
ancestorDiffers = false;
for (i = 0; i < longestAncestorBranch; i++) {
	for (j = 0; j < ancestorsArrayLength - 1; j++) {
		if (ancestorsArray[j][i] !== ancestorsArray[j + 1][i]) {
			ancestorDiffers = true;
			break;
		}
	}
	if (ancestorDiffers) {
		break;
	}
	$closestSharedAncestor = ancestorsArray[0][i];
}
$closestSharedAncestor = $($closestSharedAncestor);