Selector기반 사고란?
이벤트에 따른Class&상태 변화가 있을 때
그에 대한 조건을 일일이 확인하지 않고
Selector에서 선처리 할 수 있도록 설계하는 사고방법
25.
Class를 이용한 UI예제
$('#list>li').click(function(){
if($(this).hasClass('select')) {
$(this).removeClass('select');
} else {
$(this).addClass('select');
}
});
li태그 선택
예제보기
$('#delete').click(function() {
$('#list>li.select').remove();
});
li태그 선택
26.
Form요소를 이용한 UI예제
$('#delete').click(function(){
$('#list input:checked').closest('li').remove();
});
li태그 선택
예제보기
parent()는 리뉴얼 하면서 DOM이 끊길 수 있고
parents()는 복수로 적용될 수 있기 때문에
반드시 closest()를 사용
live를 사용하면 된다!
$('#list>li').click(function(){ …… });
bind
$(document).on('click', '#list>li', function() { …… });
live
한 번만 선언하면 계속 적용된다.
실수로 여러 번 선언했을 경우 여러 번 동작한다.
초기 로딩될 때 한 번만 사용하자.
예제보기
Selector가 일정 범위를벗어나지 않음
$('button[data-toggle="dropdown"]').click(function() {
if($(this).hasClass('active')) {
$(this).closest('.dropdown-set').find('.dropdown-menu').removeClass('active');
} else {
$(this).closest('.dropdown-set').find('.dropdown-menu').addClass('active');
}
});
이벤트가 일어났을 때 이벤트 주체(this)에서
.closest()로 selector의 범위를 한정하고 DOM을 탐색
39.
가끔 사용할 경우실행형으로 작성
function initDropdown() {
$('button[data-toggle="dropdown"]').click(function() {
if($(this).hasClass('active')) {
$(this).closest('.dropdown-set').find('.dropdown-menu').removeClass('active');
} else {
$(this).closest('.dropdown-set').find('.dropdown-menu').addClass('active');
}
});
}
아래 함수를 공통모듈 js파일에 넣고 필요할 때 호출
예제보기