본문 바로가기
JavaScript

[JavaScript] Select 메뉴 만들기

by teamnova 2022. 3. 27.
728x90

안녕하세요

 

오늘은 셀렉트 메뉴를 만들어보겠습니다.

 

메뉴를 클릭하면 선택할 수 있는 메뉴들이 하단에 나열되고

 

해당 메뉴를 클릭하면 셀렉트 박스에 설정되는 것을 확인 할 수 있습니다.

 

*결과

 

1. closest 함수

$(selector).closest(selector)에서 closest 함수는 셀렉터로 잡히는 상위 요소중 가장 근접한 하나를 반환합니다.

var parent = $(this).closest('.select');

2. hasClass 함수

.hasClass() 메서드는 선택한 요소에 클래스가 있는지 여부를 true,false로 반환합니다.

 if ( ! parent.hasClass('is-open'))

3. addClass 함수

.addClass() 메서드는 선택한 요소의 클래스를 추가합니다.

parent.addClass('is-open');

4. removeClass 함수 & not 함수

.removeClass() 메서드는 선택한 요소의 클래스를 삭제합니다. 

.not()은 선택한 요소 중 특정 선택자를 제외한 요소를 선택합니다.

 

$('.select.is-open').not(parent).removeClass('is-open');

 

5. on 함수

.on() 는 특정 요소에 이벤트를 바인딩 합니다.

$(selector).on(eventType, function(){

// ...something

});

 

.on('click','ul>li',function(){

 

 

*전체 코드

<!doctype html>
<html lang="kr">
	<head>
	<meta charset="UTF-8">
	<title>Select</title>

<style>
@import "https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css";
*, *:after, *:before {
  box-sizing: border-box;
}

html {
  box-sizing: inherit;
  background: -webkit-linear-gradient(right, #8e9eab, #eef2f3);
  background: linear-gradient(to left, #8e9eab, #eef2f3);
}

body {
  margin: 10% auto;
  text-align: center;
  font-size: 12px;
}

.select {
  position: relative;
  display: block;
  margin: 0 auto;
  width: 100%;
  max-width: 325px;
  color: #cccccc;
  vertical-align: middle;
  text-align: left;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-touch-callout: none;
}
.select .placeholder {
  position: relative;
  display: block;
  background-color: #393d41;
  z-index: 1;
  padding: 1em;
  border-radius: 2px;
  cursor: pointer;
}
.select .placeholder:hover {
  background: #34383c;
}
.select .placeholder:after {
  position: absolute;
  right: 1em;
  top: 50%;
  -webkit-transform: translateY(-50%);
          transform: translateY(-50%);
  font-family: 'FontAwesome';
  content: '\f078';
  z-index: 10;
}
.select.is-open .placeholder:after {
  content: '\f077';
}
.select.is-open ul {
  display: block;
}
.select.select--white .placeholder {
  background: #fff;
  color: #999;
}
.select.select--white .placeholder:hover {
  background: #fafafa;
}
.select ul {
  display: none;
  position: absolute;
  overflow: hidden;
  width: 100%;
  background: #fff;
  border-radius: 2px;
  top: 100%;
  left: 0;
  list-style: none;
  margin: 5px 0 0 0;
  padding: 0;
  z-index: 100;
}
.select ul li {
  display: block;
  text-align: left;
  padding: 0.8em 1em 0.8em 1em;
  color: #999;
  cursor: pointer;
}
.select ul li:hover {
  background: #4ebbf0;
  color: #fff;
}

</style>
</head>
<body>

<div class="select">
  <span class="placeholder">Select your language</span>
  <ul>
    <li>España- Español</li>
    <li>United States - English</li>
    <li>France - Français</li>
    <li>Deutschland - Deutsch</li>
  </ul>
</div>

<br>

<div class="select select--white">
  <span class="placeholder">Select your language</span>
  <ul>
    <li>España- Español</li>
    <li>United States - English</li>
    <li>France - Français</li>
    <li>Deutschland - Deutsch</li>
  </ul>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
<script type="text/javascript">
$('.select').on('click','.placeholder',function(){
  var parent = $(this).closest('.select');
  
  if ( ! parent.hasClass('is-open')){
    parent.addClass('is-open');
    $('.select.is-open').not(parent).removeClass('is-open');
  }else{
    parent.removeClass('is-open');
  }
}).on('click','ul>li',function(){
  var parent = $(this).closest('.select');
  parent.removeClass('is-open').find('.placeholder').text( $(this).text() );
});



</script>


</body>
</html>