[Javascript] 자바스크립트로 Select 옵션 재설정/변경하기

워드프레스 정보를 제공하는 블로그 Avada 2021. 11. 30. 08:59 • 댓글:

셀렉트(Select) 박스의 옵션을 재설정하고 싶은 경우 자바스크립트나 jQuery를 사용하여 옵션값을 변경할 수 있습니다. 이 글에서는 자바스크립트와 jQuery를 사용하여 Select 옵션값을 변경하는 방법에 대해 살펴보고, 예시를 통해 이를 워드프레스에 응용하는 방법에 대해서도 간단히 살펴봅니다.

자바스크립트로 Select 옵션 재설정/변경하기

Javascript로 셀렉트 박스의 옵션을 비우고 다른 값으로 교체하려는 경우 다음과 같은 코드를 사용할 수 있습니다.

var list = ["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"];

populateCombo(emptyCombo(document.querySelector('.select.optional')), list);

function emptyCombo(selectEl) {
  selectEl.options.length = 0;
  return selectEl;
}

function populateCombo(selectEl, items) {
  return appendChildren(selectEl, items.map(item => new Option(item, item)));
}

function appendChildren(el, children) {
  children.forEach(child => el.appendChild(child));
  return el;
}

// 출처: https://stackoverflow.com/questions/49885233/replace-all-options-in-select-element-from-list

위의 코드는 Stackoverflow 글 "Replace all options in select element from list(목록에서 select 요소의 모든 옵션 바꾸기)"에 제시된 것입니다. 위의 코드로 테스트해보니 예상대로 잘 작동하네요.

동일 글에서 다음과 같은 코드를 제시하는 분도 있습니다.

var outletOptions = document.querySelector("#your_select_option_id_name");

// Remove existing options, 기존 옵션 제거
Array.from(outletOptions).forEach((option) => {
  outletOptions.removeChild(option)
})

// get or set your new options here, 여기에 새 옵션 가져오기 또는 설정
var newOutletOptions = [["option name 1", "firstValue"], ["option name 2", "secondValue"]]

// Add new options, 새 옵션 추가
newOutletOptions.map((optionData) => {
  var opt = document.createElement('option')
  opt.appendChild(document.createTextNode(optionData[0]));
  opt.value = optionData[1]
  outletOptions.appendChild(opt);
})

위의 코드는 테스트해보지 않았습니다. 

jQuery 방법도 있습니다. 

/** jQuery plugins */
(function($) {
  // Populates a select drop-down with options in a list 
  $.fn.populate = function(list) {
    return this.append(list.map(item => $('<option>', {
      text  : item,
      value : item
    })));
  };
})(jQuery);

var list = ["AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT"];

$('.select.optional').empty().populate(list);

// https://stackoverflow.com/questions/1801499/how-to-change-options-of-select-with-jquery

위의 코드는 How to change options of <select> with jQuery? (jQuery로 <select> 옵션 변경하는 방법)에서 제시된 것으로 테스트해보디 예상대로 작동했습니다.

응용: 워드프레스 TablePress 플러그인으로 만든 표의 페이지네이션 필터 항목 개수 재설정하기

TablePress는 워드프레스에서 표(테이블)를 보다 효과적으로 삽입하고 관리하는 데 사용되는 플러그인입니다. 이 플러그인을 사용하여 표를 삽입할 경우 페이지당 줄수를 기본적으로 10개, 25개, 50개, 100개 중에서 선택할 수 있는 Select 박스가 표시됩니다.

응용: 워드프레스 TablePress 플러그인으로 만든 표의 페이지네이션 필터 항목 개수 재설정하기

페이지당 표시할 줄 수의 옵션을 변경하고 싶은 경우(예: 10개, 15개, 20개, 25개, 50개, 100개), 다음과 같은 자바스크립트를 사용할 수 있습니다.

// Change the values of "Show xx entries" select box optons in the WordPress TablePress plugin
// 워드프레스 TablePress 플러그인의 페이지네이션에서 "표시할 줄수" select 옵션의 값 변경하기

setTimeout(function(){
var list = ["10", "15", "20", "25", "50", "100"];

populateCombo(emptyCombo(document.querySelector('[name="tablepress-1_length"]')), list);

function emptyCombo(selectEl) {
  selectEl.options.length = 0;
  return selectEl;
}

function populateCombo(selectEl, items) {
  return appendChildren(selectEl, items.map(item => new Option(item, item)));
}

function appendChildren(el, children) {
  children.forEach(child => el.appendChild(child));
  return el;
}
},500);

위의 코드에서 잘못된 부분이 있거나 개선해야 할 부분이 있는 경우, 혹은 더 좋은 방법이 있는 경우 아래의 댓글을 통해 알려주시면 수정하도록 하겠습니다. 클릭 이벤트가 발생할 때 옵션값들을 재설정하고 새로운 값으로 대체하려고 시도해보니 자스에 대한 지식이 부족하여 잘 안 되네요.ㅠ

위와 같은 스크립트를 적용하면 다음과 같이 셀렉트 옵션값이 변경됩니다.

[Javascript] 자바스크립트로 Select 옵션 재설정/변경하기

15를 선택하면 예상대로 15개 항목이 한 페이지에 표시되고 하단의 페이지네이션(Pagination)도 잘 작동합니다.

응용: 워드프레스 TablePress 플러그인으로 만든 표의 페이지네이션 필터 항목 개수 재설정하기

플러그인 소스 파일을 변경하는 방법도 생각할 수 있지만, 플러그인 소스 파일을 수정하게 되면 추후 플러그인이 업데이트될 경우 수정 사항이 사라지게 됩니다.

자바스크립트 코드를 워드프레스에 로드하기

워드프레스에 Javascript 코드를 올바르게 추가하는 방법은 다음 글을 참고해보세요.

 

워드프레스에서 js 스크립트 파일과 스타일시트를 올바르게 로드하는 방법 - 워드프레스 정보꾸

워드프레스에서 자바스크립트(js) 파일이나 스타일시트 파일(css)을 로드하려면 wp_enqueue_script() 함수를 사용합니다. 이 글에서는 다양한 상황에서 js/css 파일을 워드프레스에 로드하는 방법에 대

www.thewordcracker.com

위의 글에 제시된 방법을 이용하는 것이 바람직합니다. 그리고 특정 페이지에서만 코드가 로드되도록 조건문을 추가하는 것이 좋습니다.

// 특정 페이지에만 로드하기
if ( is_page( '1234' ) ) {
// 코드
}

여러 페이지에 로드하려는 경우 array를 사용합니다.

// 여러 페이지에 코드 실행하기
if (is_page( array( 1, 529, '또는 페이지 제목'  ) ) ) {
// 실행할 코드
}

위의 방법이 어렵게 느껴지는 경우 플러그인을 사용하여 푸터 섹션에 스크립트를 추가할 수 있습니다. 그다지 권장하지 않지만 간편하게 자바스크립트 코드를 삽입할 수 있습니다.

참고

https://avada.tistory.com/2417

 

엘리멘터(Elementor) 토글 위젯과 아코디언 위젯 차이점

자주 묻는 질문(FAQ) 페이지나 Q&A 페이지를 만들 때 토글이나 아코디언이 많이 사용됩니다. 워드프레스 엘리멘터 페이지 빌더에는 토글 위젯과 아코디언 위젯이 제공됩니다. 이 두 위젯의 차이점

avada.tistory.com

https://avada.tistory.com/2433

 

워드프레스 Quform 플러그인 확인 이메일 필드 추가하기

워드프레스 문의폼 플러그인을 사용하여 홈페이지에서 방문자나 잠재고객으로부터 문의를 받거나 피드백을 받을 수 있습니다. 문의폼에서 이메일 주소를 잘못 입력하는 분들이 의외로 많습니

avada.tistory.com