[์์ฝ๋์ธ๋ฉ๋ด] 3level accordionMenu
๋จผ์ ๊ฒฐ๊ณผ.
์ฝ๋๋ฆฌ๋ทฐ.
1. slideDown()
์กฐ๊ฑด.
ํด๋น a
ํด๋ฆญ ์,
a
๋ฐ๋ก ๋ฐ ํ์ ์์ul
์ด ์กด์ฌํ๋ฉฐ,ul
์ด ๋ณด์ด์ง ์์์ผ ํ๋ค.
$('a').on('click', function() {
// 1. ul ์กด์ฌํ๋ฉฐ, ul์ด ๋ณด์ด์ง ์์์ผํ๋ค.
if( $(this).next().is('ul') && !($(this).next().is(':visible')) ) {
// console.log('slideDown');
$(this).next().slideDown();
return false;
}
});
2. slideUp()
์กฐ๊ฑด
ํด๋น a
ํด๋ฆญ ์,
a
๋ฐ๋ก ๋ฐ ํ์ ์์ul
์ด ์กด์ฌํ๋ฉฐ,ul
์ด ๋ณด์ฌ์ผํ๋ค.
$('a').on('click', function() {
// 2. ul ์กด์ฌํ๋ฉฐ, ul์ด ๋ณด์ฌ์ผ๋ค.
if( $(this).next().is('ul') && ($(this).next().is(':visible')) ) {
// console.log('slideUp');
$(this).next().slideUp();
return false;
}
});
๊ฒฐ๊ณผ.
$('a').on('click', function() {
// 1. ul ์กด์ฌํ๋ฉฐ, ul์ด ๋ณด์ด์ง ์์์ผํ๋ค.
if( $(this).next().is('ul') && !($(this).next().is(':visible')) ) {
// console.log('slideDown');
$(this).next().slideDown();
reuturn false;
}
// 2. ul ์กด์ฌํ๋ฉฐ, ul์ด ๋ณด์ฌ์ผ๋ค.
if( $(this).next().is('ul') && ($(this).next().is(':visible')) ) {
// console.log('slideUp');
$(this).next().slideUp();
return false;
});
์ถ๊ฐ ์กฐ๊ฑด.
Q. slideDown()
๋ ์ํ์์ ๋ค๋ฅธ a
ํด๋ฆญ ์,
๋๋ ๋ ul
์ slideUp()
๋๊ณ ๋๋ฅธ ul
์ slideDown()
๋ ์ ์์๊น?
if( $(this).next().is('ul') && !$(this).next().is(':visible')) ) {
// slideDown
// ul ์ค์ $('ul')
// ๋ด๊ฐ ํด๋ฆญํ๋ ๊ฒ ๋ง๊ณ $('ul').not($(this).next())
// slideUp
$('.menu ul').not($(this).next()).slideUp();
}
โ๏ธ์ฃผ์ํด์ผ ํ ์ 1.
ul ์ค์
$('ul')
์ด ์๋๋ผ$(.menu ul)
์ด๋ค.
$('ul')
๋ก ํ ๊ฒฝ์ฐ,ul.menu
๋ ๊ฐ์ด ์ฌ๋ผ์ ธ ๋ฒ๋ฆฌ๊ธฐ๋๋ฌธ.
โ๏ธ์ฃผ์ํด์ผ ํ ์ 2.
ํด๋์ค์ ํ์ ์ ํ์๋ฅผ ๋ฃ์ด ๋ช ํํ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. (๋ค๋ฅธ ์์์ ์ด๋ฒคํธ๊ฐ ๊ผฌ์ฌ๋ฒ๋ฆด ์๋ ์๋ค.)
$('.menu ul').not($(this.next().parentsUntil('.menu')).slideUp()
parentsUntil()
:: ์ ํํ ์์์ ์์ ์์ ์ค์์ ์ง์ ํ ์ ํ์์ ํด๋นํ๋ ์์ ๋ฐ๋ก ์ด์ ๊น์ง์ ์์๋ฅผ ๋ชจ๋ ์ ํํ๋ค.
if( $(this).next().is('ul') && !$(this).next().is(':visible')) ) {
$('.menu ul').not($(this).next().parentsUntil('.menu')).slideUp();
}
a
๋ฅผ ํด๋ฆญํ๋ฉด ํด๋น ul ($(this).next())
์ด ๋ณํ๋ค๋ ๊ฒ์ ์๊พธ ์๋๋ค. ๊ณ์ ์ธ์ํ๊ณ ์๊ฐํ๋ฉด์ ์ฝ๋ ์ง์๐ฅ