본문 바로가기

제이쿼리

사용자 정의 메소드

jQuery 객체에 사용자 정의 메소드를 추가하여 사용하는 방법

 

$.fn

 

우리는 다음과 같이 jQuery를 통해 미리 제작된 다양한 메소드를 간편하게 사용하고 있었다.

$("button").eq(0).text("첫 번째 버튼");

 

이렇게 jQuery.Selector를 이용하는 메소드를 추가하려면 $.fn.메소드명을 통해 추가하면 된다.

 

다음 소스코드는 서버에서 특정 문자열이 XSS 필터링되어 변환된 문자열을 다시 복원하는 메소드의 예시이다.

<!DOCTYPE html>
<html lang="en">
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
<script type="text/javascript">

$.fn.HTMLTagRestore = function() {

    var value = this.val();

    if(this.is("input") || this.is("textarea")) {
        
        this.val(
            value.replaceAll('& lt;', '<')
                    .replaceAll('& gt;', '>')

        );
    }

    return this;
}

</script>

</body>
</html>

 

(& 문자열 다음의 띄어쓰기는 티스토리에서 자동으로 치환하여 의도된 띄어쓰기이다.)

 

보는 바와 같이 input 또는 textarea 태그일 경우 해당 기능을 수행한다.

 

메소드 바디안에 this 키워드가 가리키는 부분은 $("셀렉터")를 통해 들어온 jQuery Object를 뜻한다.

그래서 this 키워드를 통해 jQuery 메소드를 사용할 수 있으며

맨 마지막에 return this;를 통하여 최종적으로 리턴하게 된다.

 

리턴을 적지 않을 경우 다음과 같이 jQuery 메소드를 이어서 호출할 수 없다.

$("input").HTMLTagRestore().show();

 

$.fn의 최종ㅇ목적은 셀렉터를 이용할 수 있는 확장 메소드를 구현하는 것이다.

추가로 셀렉터를 이용하지 않는 $.ajax와 같은 메소드의 구현은 다음과 같다.

 

$.HTMLTagRestore = function() {

    $("input, textarea").each(function() {
        var value = $(this).val();

        $(this).val(
            value.replaceAll('& lt;', '<')
                    .replaceAll('& lt;', '<')
        );
    });
};

$.fn.메소드명이 아닌 $.메소드명으로 정의하면 된다.

이 경우 $.HTMLTagRestoreAll(); 과 같이 사용할 수 있다.

 

 

출처:

annotations.tistory.com/89?category=595292

'제이쿼리' 카테고리의 다른 글

$.map()  (0) 2020.12.06
jquery 분석  (0) 2020.11.20
.val()에 대해  (0) 2020.10.15
[제이쿼리] 가장 가까운 상위 요소 선택자  (0) 2020.10.04
[제이쿼리] 상위 요소 선택자  (0) 2020.10.04