개발 메모장

[jQuery] noConflict - 식별자 중복, 이중 jQuery 충돌 방지 본문

Java Script

[jQuery] noConflict - 식별자 중복, 이중 jQuery 충돌 방지

yyyyMMdd 2023. 12. 11. 15:38
728x90

#. 개발한 내용이 jQuery 3 버전대에서만 처리되는 것이 있었습니다.

 

#. 그러나 기존 개발베이스는 jQuert 1 버전대를 사용하고 있었고 이미 개발되어있는 것이었기에 3 버전대로 변경하면 문법 및 존재하지 않는 기능 오류를 뱉어대는 것이었습니다.

 

#. 확인해 보니 새로 개발한 내용이 1 버전대에선 정상적으로 처리되지 않았습니다.

 

#. 그래서 찾아보던 중 이중으로 사용이 가능하다고 하여 noConflict 기능을 사용해 봤습니다.

 


#. noConflict()

  • 기본 jQuery의 식별자는 $ 기호로 $("#ID") , $.ajax, $.each() 등과 같이 사용하게 됩니다.

  • 그러나 식별자가 $인 다른 라이브러리를 같이 사용하고자 할 때 덮어 써지면서 기존 라이브러리 기능을 온전히 사용할 수 없게 됩니다.
    (대표적으로 jQuery와 protoType.js가 동일 식별자를 사용 - $)
<script type="text/javascript" src="경로/jquery-3.6.0.min.js"></script>
<script src="prototype.js"></script>

<script>
	$.ajax({
    	url : 'test.do'
    })  
</script>


- 위와 같이 jQuery가 먼저 선언됐고 protoType.js가 이후 선언됐다면 jQuery에서 사용하는 기능들을 제대로 실행할 수 없습니다.

 


#. noConflict()로 구분할 식별자 설정하기

<script type="text/javascript" src="jquery-3.6.0.min.js"></script>
<script>
	$.noConflict(true);
</script>

<script src="prototype.js"></script> 
<script>
	jQuery.ajax({
		url : 'test.do',
		dataType : 'JSON',
		...
	})
</script>


- 이렇게 작성하면 jQuery를 충돌되지 않게 설정하였고 이로 인해 디폴트 값인 jQuery가 $ 대신 식별자로 사용됩니다.

 


#. jQuery를 상이한 버전으로 사용해야 할 때

  • 이때에도 사용방법은 동일합니다.

  • 나의 경우 임포트한 페이지에서 1 버전대를 선언해 두었고 실제 사용할 페이지에서 3 버전대를 선언하였습니다.
<script type="text/javascript" src="jquery-3.6.0.min.js"></script>
<script>
    var $test = jQuery.noConflict(true);
    $test.ajax({
    	url : 'test.do'
    });
</script>


- 이렇게 작성하면 기존의 1 버전대 jQuery는 $ 식별자를 그대로 사용하게 되고 3 버전대는 $test를 $ 대신 붙여 사용할 수 있습니다.

 

 

===========================================================
틀린 내용이 있거나 이견 있으시면 언제든 가감 없이 말씀 부탁드립니다!

===========================================================

728x90