Web Tech/jQuery

[STEP 02] 기초 플러그인 제작 가이드

jaiyah 2015. 6. 23. 14:59

jQuery PlugIn 기초


STEP 01 단계에서는  a 태그가 없는 li 에 class 를 추가하는 플러그인이었습니다.

하지만 li 요소는 탭포커스가 이동되지 않기 때문에 접근성을 위한 탭포커스를 위해 마크업에 a 태그를 추가하여 접근성까지 고려한 플러그인을 제작해보도록 하겠습니다.



Mark-up

<ul>
<li><a href="#none">Lorem ipsum dolor sit amet.</a></li>
<li><a href="#none">Lorem ipsum dolor sit amet. Lorem ipsum dolor.</a></li>
<li><a href="#none">Lorem ipsum dolor sit amet.</a></li>
<li><a href="#none">Lorem ipsum dolor sit amet. Lorem ipsum dolor.</a></li>
</ul>




STEP 02

JavaScript
// 전역이 오염되지 않도록 별도의 공간을 생성
// 스코프 함수 (즉시 실행되는 함수 내부)
(function (global, $) {

    'use strict';

    // $.fn.radioClass 플러그인이 존재 유무를 체크합니다.
    // 두가지 방법으로 체크할 수 있습니다. 코드량을 줄이기 위해 !$.fn.radioClass 를 사용합니다.
    // if(typeof $.fn.radioClass !== 'function')
    if (!$.fn.radioClass) {

        // $.fn 객체의 radioClass 메소드 정의
        $.fn.radioClass = function(name) {

            // 플러그인이 연결된 jQuery 인스턴스 객체에 name 클래스 속성을 추가합니다.
            this.parent().addClass(name);

            // 형제 인스턴스의 집합을 찾습니다.
            var $siblings = this.parent().siblings();

            // 집합 내부를 순환하여 name 클래스 속성 이름 값을 가진 요소에서 name 클래스 속성을 제거합니다.
            $.each($siblings, function(index, el) {

                var _$siblings =  $siblings.eq(index);

                if ( _$siblings.hasClass(name) ) {
                    _$siblings.removeClass(name);
                }

            });

            // jQuery 체이닝(Chaning)을 고려한다면, this 를 반환합니다.
            // this 는 jQuery 인스턴스 객체입니다.
            // 체이닝을 하지 않겠다면 굳이 this 를 반환하지 않아도 됩니다.
            return this;

        }

    }

})(window, window.jQuery);

$(function () {
    // 접근성을 위해 context 를 a 로 설정합니다.
    var $ul = $('ul');
    $ul.on('click','li > a', function (e) {
        e.preventDefault();
        $(this).radioClass('selected');
    })
});


다음 단계 [STEP 03] 에서는 사용자가 정의한 클래스 속성을 원하는 요소에 설정할 수 있도록 확장해 보겠습니다.


Jaehee's e-room