PGR21.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(){
                                // 어떻게..?
                        });
                });

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
안군시대
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
수정 아이콘
상세한 답변 감사합니다 :)
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
176304 [질문] 9401버스 아침 출근 시간에 판교현대백화점 정류장에서 탑승이 가능한가요? [6] 지포스21978 24/05/20 1978
176303 [질문] We good / 영어권 생활하셨거나 영잘알분 계신지요 [4] 다리기1881 24/05/20 1881
176302 [질문] 데스크탑에 무선랜카드 달았는데 신호가 5초마다 끊킵니다 [4] 요하네즈1258 24/05/20 1258
176301 [질문] 일산 킨텍스 갔다 먹을 맛집 추천 받습니다. [8] 포커페쑤1131 24/05/20 1131
176300 [질문] (정치)민주당 지지자분들이 의장 선출에 분개하는 이유? [26] 칭찬합시다.2754 24/05/20 2754
176299 [질문] 기타 입문하려 하는데 독학하는 팁 부탁드립니다. [15] 하나1372 24/05/20 1372
176298 [질문] 조립피씨 다 조립했는데 뭔가... 느립니다 ㅜㅜ [11] cocked2173 24/05/20 2173
176297 [질문] 사업자 세무사에게 맡기면 절세효과 있나요? [10] 기술적트레이더2268 24/05/20 2268
176296 [질문] 여자친구가 리니지에 빠져 현질을 미친듯이 합니다..(2) [67] 삭제됨4962 24/05/20 4962
176295 [질문] 바람막이에 반사띠가 너덜거리는데 수선방법이? [3] 앗흥1640 24/05/19 1640
176294 [질문] 유능한 직장동료(상사, 부하직원)의 특징은 뭐가 있을까요? [33] 칭찬합시다.3439 24/05/19 3439
176293 [질문] 토익시험 공부방법 질문 [7] 스핔스핔1770 24/05/19 1770
176292 [질문] 대출 실행일 안에 전자약정 하지않으면 대출 취소되나요? [3] 43년신혼1년3280 24/05/18 3280
176291 [질문] 행복주택,국민임대주택 해보신분 계신가요? [3] 라리3090 24/05/18 3090
176290 [질문] 신혼여행으로 발리와 카오락 어디가 나을까요? [13] 욱쓰3140 24/05/18 3140
176289 [질문] 스타크래프트2 컨텐츠 관련 질문입니다. [3] 일월마가2167 24/05/18 2167
176288 [질문] 닌텐도 스위치용 스포츠 게임 추천 부탁드립니다. [5] 산밑의왕2306 24/05/18 2306
176287 [질문] 최근 맥북 트랙패드 먹통 되신 분들 있나요? Carliot980 24/05/18 980
176286 [질문] 책상 하부 가리는 가림판 제품이 있을까요? [1] Ellun1187 24/05/18 1187
176284 [질문] 자동차 전조등 칸델라 이거 정상인가요? [3] 앗흥1117 24/05/18 1117
176283 [질문] 손바닥을 펴서 마주보게 한 후 교차로 둥글게 돌리다보면 서로 밀쳐내는 힘이 느껴지는데 무슨 원리인지 궁금하네요 [8] 소오강호1514 24/05/18 1514
176282 [질문] 해외여행 가시면 얼마나 걸으시나요? [12] 종이컵1373 24/05/18 1373
176281 [질문] 치앙마이 지리 아시는 분 계신가요? 모찌피치모찌피치800 24/05/18 800
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로