GAJUNG21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2024/04/08 14:56:20
Name Mindow
Subject [질문] 자바스크립트, 제이쿼리 고수 개발자분들께 질문드립니다 (수정됨)
자바스크립트, 제이쿼리 고수 개발자분들께 질문드립니다

제가 하려는 질문은 제이쿼리 기반의 질문이긴 하지만 자바스크립트만 잘 아셔도 잘 아시지 않을까 싶습니다!
1차원적으로 간단하게 노가다식으로 짜면 그렇게 어렵지 않지만 고급응용으로 짜보려 하니 너무 어렵네요


[질문의 요지]
html의 클래스명 (개발에서의 클래스가 아닌 css나 제이쿼리 선택자로 쓰이는 그 class)에 포함된 접두사나 접미사 같은 걸
string으로 추출해서 다른 element 의 클래스의 접두사, 접미사로 활용하기를 어떻게 해야할지 궁금합니다.
위 설명만 보면 헷갈릴 수도 있으니 예제로...
pgr 에디터는 꺽쇠 입력이 안 되므로 [ 와 ]로 대체하겠습니다 ^^;;


----------------------------------------------------

원하는 기능:
버튼을 마우스오버하면 다른 div에 그 버튼 클래스와 상응하는 멀티클래스로 들어갑니다


[div class="map"]
[button class="btn-abab"]ABAB[/button]
[button class="btn-dcdc"]DCDC[/button]
[button class="btn-fafa"]FAFA[/button]
[/div]

----1차원적인 Script----
$(".map").addClass("bg-abab"); // 페이지 로드시 호출
$(".map [class*='btn-']").each(function(){
                        let btn = $(this);
                        btn.mouseenter(function(){
                                btn.parent(".map").removeClass("bg-abab bg-dcdc bg-fafa");
                                if(btn.hasClass("btn-abab")){
                                        btn.parent(".map").addClass("bg-abab");
                                };
                                if(btn.hasClass("btn-dcdc")){
                                        btn.parent(".map").addClass("bg-dcdc");
                                };
                                if(btn.hasClass("btn-fafa")){
                                        btn.parent(".map").addClass("bg-fafa");
                                };
                        });
                });

----만약에 버튼 갯수가 너무 많거나 클래스명이 유동적이여서 1차원적으로 짜면 안 될때는..?----
$(".map").addClass("bg-abab"); // 페이지 로드시 호출
$(".map [class*='btn-']").each(function(){
                        let btn = $(this);
                        btn.mouseenter(function(){
                                // 어떻게..?
                        });
                });

마속 나무위키 문서 2.3. 가정의 패전 인용

"그런데 여기서 마속은 제갈량의 명령을 무시하고 길목에 세워야 할 방어진지를 산 꼭대기에 세우는, 전쟁사상 다시 없을 바보짓을 한다.
부장 왕평이 필사적으로 말렸지만 이마저도 무시해버린다."
안군시대
24/04/08 15:22
수정 아이콘
질문의 요지를 잘 모르겠는데요;; 접두사나 접미사를 분리할때는, 자바스크립트 스트링의 slice나 split 함수 등을 이용해서 분리해내시면 될듯 합니다.
예를 들어 "btn-aaa", "btn-bbb" 등에서 btn만 찾아내고 싶다면,

var className = [해당 element의 클래스명];
var prefix = className.split("-")[0]; // prefix = "btn"

이런 식으로 합니다. 자세한건 MDN등을 찾아서 javascript string의 메소드들을 찾아보세요.
24/04/08 15:28
수정 아이콘
답변 감사합니다~!
24/04/08 15:35
수정 아이콘
let btnClass = $(this).prop("class");

btn.mouseenter(function(){
btn.parent(".map").prop("class", btnClass );
});

하면 끝이지 않을까요?!
24/04/08 17:32
수정 아이콘
질문하신 내용을 바탕으로, 버튼의 클래스명에서 특정 접두사나 접미사를 추출하여 다른 요소의 클래스로 활용하는 고급적인 방법을 제공해드리겠습니다. 이는 유연하고 확장 가능한 코드를 작성하는 데 도움이 됩니다.

이를 위해, 버튼 클래스명에서 접두사 "btn-" 뒤에 오는 문자열을 추출하고, 해당 문자열을 이용해 동적으로 "map" 클래스에 "bg-" 접두사와 함께 추가할 것입니다. 아래는 이 과정을 구현한 코드 예제입니다.

javascript
Copy code
$(function() {
// 페이지 로드 시 기본적으로 첫 번째 버튼에 해당하는 배경 클래스 추가
let initialClass = $('.map button[class*="btn-"]').first().attr('class').match(/btn-(w+)/)[1];
$('.map').addClass('bg-' + initialClass);

// 모든 버튼에 대해 이벤트 리스너 추가
$('.map button[class*="btn-"]').mouseenter(function() {
// 현재 버튼의 클래스에서 'btn-' 다음 오는 문자열 추출
let suffix = $(this).attr('class').match(/btn-(w+)/)[1];
// 'map' 요소에서 모든 'bg-' 접두사가 붙은 클래스 제거
$('.map').removeClass(function(index, className) {
return (className.match(/(s|^)bg-w+/g) || []).join(' ');
});
// 추출한 접미사를 이용해 새로운 클래스 추가
$('.map').addClass('bg-' + suffix);
});
});
이 코드는 다음과 같이 작동합니다:

페이지가 로드될 때, 첫 번째 버튼에 해당하는 배경 클래스를 "map" div에 추가합니다. 이를 통해 초기 상태에서도 관련 배경이 보여지도록 합니다.
각 버튼에 마우스를 올렸을 때, 해당 버튼의 클래스명에서 "btn-" 접두사 다음에 오는 문자열(접미사)을 추출합니다.
"map" div에서 모든 "bg-"로 시작하는 클래스를 제거합니다. 이는 removeClass 함수 내에서 정규식을 사용하여 이루어집니다.
추출한 접미사를 "bg-" 접두사와 결합하여 새로운 클래스를 "map" div에 추가합니다.
이 방법을 사용하면, 버튼의 클래스명이 얼마나 많거나 변동적이든 상관없이 코드를 수정하지 않고도 동적으로 배경 클래스를 변경할 수 있습니다. 이는 유지 보수를 쉽게 하고, 확장성 있는 코드를 작성하는 데 매우 유용합니다.
24/04/17 09:35
수정 아이콘
상세한 답변 감사합니다 :)
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
175800 [질문] 층간소음 유발 세대 알아내는 방법 없을까요? [15] 43년신혼1년5743 24/04/16 5743
175799 [질문] 드디어...! PC견적 질문 드립니다. [21] Winter_SkaDi6402 24/04/16 6402
175798 [질문] 컴퓨터 본체 중고가격 책정 좀 부탁드려요 [7] 정유미4875 24/04/16 4875
175797 [질문] 경주 여행 교통편에 대해서 문의 드립니다. [13] 황신강림4735 24/04/16 4735
175796 [질문] 남자옷 사기 적당한 인터넷쇼핑몰 어떤게 있을까요..? [16] Restar5875 24/04/16 5875
175795 [질문] 인생 최초로 신차가 출고 됩니다. 미리 알아둬야 할 정보가 있을까요?? [15] 원스6145 24/04/16 6145
175794 [질문] 남자 크로스백 추천해주실 수 있을까요? [1] 살다보니별일이5680 24/04/15 5680
175793 [질문] 카카오 워크 익명 설문 문의 [2] 수타군4855 24/04/15 4855
175792 [질문] 초등 2학년 아이에게 적합한 폰 추천 부탁드립니다. [8] 쌍둥이아빠5820 24/04/15 5820
175791 [질문] 무선 마우스+스마트tv+pc 연결 관련 질문입니다 [1] 던멜5224 24/04/15 5224
175790 [질문] 갤럭시 S24 울트라 카메라 질문입니다 [3] Arya Stark3978 24/04/15 3978
175789 [질문] 조깅용 팬츠 추천 부탁 드리겠습니다. [8] 전반전0대04069 24/04/15 4069
175788 [질문] 아주 간단한 수학 3D 그래프 프로그램 있을까요? [4] 햄찌쫓는겐지4831 24/04/15 4831
175787 [질문] 가압류, 근저당 많은 아파트 매매시 주의사항 여쭤봅니다. [5] 기다리다5238 24/04/15 5238
175786 [질문] 초등 여아 접이식 자전거 어떤가요? [3] 눈팅만일년4556 24/04/15 4556
175785 [질문] 지금 펨코와 일베랑 상관 없나요? [51] pecotek7173 24/04/15 7173
175784 [질문] 갤럭시 S24 + , S24 U 고민이네요. [12] SlamMarine5081 24/04/15 5081
175783 [질문] 셀프 상속진행해보신분 계실까요? [4] SG워너비4804 24/04/15 4804
175782 [질문] 차량 교체주기가 어떻게되세요? [39] 날아가고 싶어.5632 24/04/15 5632
175781 [질문] 미국 역사상 최악의 사회 혼란+암흑기는 뭐라고 생각하시나요? [11] 보리야밥먹자4478 24/04/15 4478
175780 [질문] 애기 이름을 영어식으로 짓고 싶습니다. [47] 카즈하6906 24/04/15 6906
175779 [질문] 핸드폰 발열이 많이 있을때 냉동실에 넣어도 괜찮나요 [9] 뵈미우스5605 24/04/15 5605
175778 [질문] 첫 중고차 구매 자동차보험 관련 질문드립니다. [3] 7104896 24/04/15 4896
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기
회원정보 보기
닫기