컴퓨터/JavaScript_typescript

[javascript] recursion, element.matches(selectorString), ~.함수이름 == -1이면 쓸 수 없는 함수인 것

수제녹차 2020. 1. 13. 09:24
728x90
반응형

* recursion : when you call a function from within itself until or unless a condition is a met.

<div class="bg-1">
	.bg-1
	<div class="bg-2">
		.bg-2
		<div class="bg-3">
			.bg-3
			<div class="bg-4">
				.bg-4
				<div class="bg-5">
					.bg-5
					<div class="bg-6">
						.bg-6
						<div class="bg-7">
							.bg-7
						</div>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>
// distance : track the distance between our elem and an element with the selector
var levelsUp = function (elem, selector, distance) {
    if (!distance) {
        distance = 0;
    }
    distance ++;
    
    // Get the parent of the current element
    var parent = elem.parentNode;

    // If you reach an element with no matches() method, bail
    if (!parent.matches) return -1;

    // If we've reached the parent, return the distance
    if (parent.matches(selector)) return distance;

    // Otherwise, recursively run levelsUp() again
    // The levelsUp() method will run multiple times until it finds a match or hits the window element.
    // and will return whatever the final value for distance is (or -1 if no match is found)
    return levelsUp(parent, selector, distance);
}
var start = document.querySelector('.bg-7');

console.log(levelsUp(start, '.bg-5')); // 2
console.log(levelsUp(start, '.bg-1')); // 6
console.log(levelsUp(start, '.bg-3')); // 4
console.log(levelsUp(start, '.nope')); // -1

 

var result = element.matches(selectorString)

 

source : Chris Ferdinandi, go make things

https://developer.mozilla.org/en-US/docs/Web/API/Element/matches

반응형