바인딩 시 문서에 존재하는 요소와 나중에 동적으로 추가되는 요소에 이벤트 핸들러를 연결할 수 있습니다. 이는 초기 이벤트 바인딩이 발생할 때 존재하지 않을 수 있는 요소에 대한 이벤트를 처리할 수 있으므로 동적으로 생성되거나 로드된 콘텐츠로 작업할 때 특히 유용합니다.
$(document).on(eventName, selector, eventHandler);
클릭 이벤트는 $(document)에 위임되며, 이벤트 바인딩이 처음 설정되었을 때 요소가 존재했는지 여부에 관계없이 셀렉터와 일치하는 요소에서 클릭이 발생할 때마다 이벤트 핸들러가 트리거됩니다.
.on() 이벤트 핸들러를 $(document) 자체에 첨부할 경우 적절하게 사용하지 않으면 성능에 영향을 미칠 수 있으므로 주의해서 사용해야 합니다. 일반적으로 이벤트 핸들러는 무분별하게 사용하는 것보다 바인딩 시점에 사용 가능한 가장 가까운 상위 요소에 연결하는 것이 좋습니다.
DOM(Document Object Model)이 완전히 로드되고 JavaScript로 조작할 준비가 되었을 때 코드를 실행하는 데 사용되는 jQuery 메서드입니다. 해당 요소에 의존하는 JavaScript 코드를 실행하기 전에 웹 페이지의 모든 필수 요소가 존재하는지 확인하기 위해 일반적으로 사용되는 기술입니다.
함수가 $(document) 인수로 전달됩니다. .ready()는 DOM이 완전히 로드되고 준비되면 실행되는 콜백 함수입니다.그러면 이 함수 내부의 코드가 페이지의 HTML 요소와 안전하게 상호 작용할 수 있습니다.
$(document).ready(function() {
$("button").click(function() {
//
});
});
즉 .ready() 함수는 클릭 이벤트 핸들러를 부착하기 전에 버튼이 완전히 로드되고 JavaScript에 의해 조작될 준비가 되었는지 확인합니다.
$(document).ready()가 항상 필요한 것은 아닙니다. 특히 JavaScript 코드가 HTML 문서의 끝에 있는 경우에는 닫는 태그 바로 앞에 있습니다. 이 경우 JavaScript 코드가 실행될 때까지 DOM이 이미 완전히 로드됩니다.
$(documet).ready() 대신 $()를 사용합시다.
$(function(){
// 실행할 기능을 정의해주세요.
});
jQuery 3.0 버전 이후부터는 첫 번째에 해당하는 구문만 사용하는 것을 권장드립니다. .ready() Event는 1.8 버전에서는 deprecated 되었으며 3.0에서는 지원하지 않기 때문입니다.
주로 이벤트 위임에 사용됩니다. 이를 통해 초기 이벤트 바인딩 후 문서에 추가된 요소를 포함하여 이벤트 핸들러를 요소에 동적으로 연결할 수 있습니다.
요소에 이벤트 처리기를 연결하고 이벤트 유형, 특정 요소를 대상으로 하는 셀렉터 및 이벤트 기능을 지정하는 데 사용됩니다. 동적으로 추가된 요소가 있거나 상위 요소에 이벤트를 위임하려는 경우에 자주 사용됩니다.
DOM이 완전히 로드되고 JavaScript로 조작할 준비가 되었을 때 코드를 실행하는 데 사용됩니다.
콜백 함수를 전달하면 DOM이 준비되면 해당 함수가 실행됩니다. 일반적으로 이벤트 핸들러를 바인딩하거나, DOM 요소를 조작하거나, 특정 요소가 있어야 하는 기타 작업을 수행하는 데 사용됩니다.
위의 내용을 살펴봤다면 둘의 차이도 이해 할 수 있습니다.
웹 브라우저의 HTML문서 렌더링 과정
불러오기(Loading)
불러오기는 HTTP 모듈 또는 파일시스템으로 전달 받은리소스 스트림(Resource Stream)을 읽는 과정으로 로더(Loader)가 이 역할을 맡고 있다.
로더는 단순히 읽는 것이 아니라, 이미 데이터를 읽었는지도 확인하고,팝업창을 열지 말지, 또는 파일을 다운로드 받을 지를 결정한다.파싱(Parsing)
파싱은 DOM(Document Object Model) 트리를 만드는 과정이다.
웹 엔진이 가지고 있는 HTML/XML 파서가 문서를 파싱해서 DOM Tree를 만든다.
DOM Tree : 내용을 저장하는 트리로 javascript에서 접근하는 DOM객체를 쓸 때 이용됨.렌더링 트리 만들기(Rendering Tree)
렌더링 트리 : DOM Tree와는 별도로 그리기 위한 트리가 만들어져야 하는데, 그것이 렌더링 트리다.
(그릴 때 필요없는 head, title, body 태그등이 없음 + display:none; 처럼 DOM에는 있지만 화면에서는 걸러내야할 것들이 걸러내진 트리)CSS 결정
CSS는 선택자에 따라서 적용되는 태그가 다르기 때문에
모든 CSS 스타일을 분석해 태그에 스타일 규칙이 적용되게 결정한다.레이아웃(Layout)
렌더링 트리에서 위치나 크기를 가지고 있지 않기 때문에
객체들에게 위치와 크기를 정해주는 과정을 레이아웃이라고 한다.그리기(Painting)
렌더링 트리를 탐색하면서 페이지를 그려나간다.