• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 상품정렬 5만원 이하 보기 기능 질문 (card 폭 주는 거)

상품정렬 5만원 이하 보기 기능 질문 (card 폭 주는 거)

5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #18604

    박주연
    참가자

    숙제는 다 했구요. 가격순 정렬, 가나다순 정렬, XX원 이하 보기,  원래대로보기도 잘 필터링 됩니다.

    근데 필터링 되고나서 카드 크기가 제멋데로 바뀌더라구요. 

    Bootstrap 컬럼 클래스 이용해서 크기를 고정해 놨더니 이미지에 padding이 들어가요^^;;;

    padding 어떻게 없애죠? 

    그리고 bootstrap 클래스 쓰는 것 보다 카드 크기 고정하는 더 좋은 방법 있으면 알려주세요~~

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

        <!-- main.css -->
        <link rel="stylesheet" href="main.css">
        <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
       
       
        <title>Document</title>
    </head>
    <body>
       
      <div class="card-group container">
        
      </div>

      <div class="container my-4">
        <button class="btn btn-danger sort-price">가격순 정렬</button>
        <button class="btn btn-primary sort-title">가나다순 정렬</button>
        <input id=filterInput>
        <button class="btn btn-primary filter">이하 보기</button>
        <button class="btn btn-warning original">원래대로</button>
      </div>
     
      <script>
        var products = [
          { id : 0, price : 71000, title : 'Blossom Dress' },
          { id : 1, price : 50000, title : 'Springfield Shirt' },
          { id : 2, price : 60000, title : 'Black Monastery' }
        ]

        //products 에 있는 0번째 자료의 price를 class card-body의 p 태그에 넣는다.
        //products 에 있는 0번째 자료의 title을 class card-body의 p 태그에 넣는다.
        products.forEach(function(i, index) {
           
            var 템플릿 = `<div class="card col-6 col-md-4">
                            <img src="https://via.placeholder.com/600">
                            <div class="card-body">
                              <h5 class="title">${i.title}</h5>
                              <p class="price">가격 : ${i.price}</p>
                              <button class="btn btn-danger">주문하기</button>
                            </div>
                          </div>`;  
                         
            $('.card-group').append(템플릿);
        });

        $('.original').click(function(){
          $('.card-group').html('');
            products.forEach(function(i, index) {
             
              var 템플릿 = `<div class="card col-6 col-md-4">
                              <img src="https://via.placeholder.com/600">
                              <div class="card-body">
                                <h5 class="title">${i.title}</h5>
                                <p class="price">가격 : ${i.price}</p>
                                <button class="btn btn-danger">주문하기</button>
                              </div>
                            </div>`;  
                           
              $('.card-group').append(템플릿);
            });
        });

        //--- 정렬 ---//
        var array1 = [2,3,5,6,60,40];
        var array = ['라', '나', '가', '다'];
        array1.sort();  // 결과: [2, 3, 40, 5, 6, 60]  => 문자 정렬 해주는 함수

        //숫자 정렬은 코딩 해줘야 함
        array.sort(function(a,b){
         //return a-b; //오름차순
          //return b-a; //내림차순
          if( a < b ){return -1;}//글자 내림차순
          else {return 1;}
        });

        $('.sort-price').click(function(){
          var newProducts = [... products];   // array 복사본 만들 때 spread operator 이용
          newProducts.sort(function(a, b){   //정렬
            return a.price - b.price;
          });
         
          newProducts.forEach(function(i, index) {      
            $('.price').eq(index).html('가격: '+ i.price);
            $('.title').eq(index).html(i.title);        
           })
       
        })

        $('.sort-title').click(function(){
          var newProducts = [... products];
          newProducts.sort(function(a, b){   //정렬
            if( a.title < b.title ){return -1;}//글자 내림차순
            else {return 1;}
          });
         
          newProducts.forEach(function(i, index) {      
            $('.price').eq(index).html('가격: '+ i.price);
            $('.title').eq(index).html(i.title);        
           })
       
        })

        //--- 필터 ---//
        var array = [2,3,5,6,60,40];
        var newArray = array.filter(function(a){       // filter()는 기존 array 를 변형 시키지 않으므로 (sort는 변형시키므로 안해도 됨)
          return a < 4;
        })
     
        //5만원이하보기 버튼을 누르면
        //가격을 필터함

        $('.filter').click(function(){
          var filterInput = $('#filterInput').val();

          if(!filterInput) {
            alert('값을 입력하시오');
          } else {
            var newProducts = products.filter(function(a){
              return a.price <= filterInput;
            })
            console.log(newProducts);

            $('.card-group').html('');
            newProducts.forEach(function(i, index) {
             
              var 템플릿 = `<div class="card col-6 col-md-4">
                              <img src="https://via.placeholder.com/600">
                              <div class="card-body">
                                <h5 class="title">${i.title}</h5>
                                <p class="price">가격 : ${i.price}</p>
                                <button class="btn btn-danger">주문하기</button>
                              </div>
                            </div>`;  
                           
              $('.card-group').append(템플릿);              
           
            })
          }
        })

        //--- 맵함수 ---//
        // 어레이 안의 데이터에다가 하나하나 똑같은 작업을 하고 싶을 때
        // 한 어레이에 전부다 2를 곱해서 새 어레이 만듦
        var array = [2,3,5,6,60,40];
        var newArray = array.map(function(a){       // filter()는 기존 array 를 변형 시키지 않으므로 (sort는 변형시키므로 안해도 됨)
          return a * 2;
        })

      </script>
         
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    </body>
    </html>

    #18605

    codingapple
    키 마스터

    col-6 이건 card 클래스와 같이 쓰지 말고 한단계 더 윗 div박스에 쓰는게 좋습니다

    col-6 이런 곳에 padding : 15px 이런게 들어있어서 그걸 내 class명으로 덮어쓰기 하거나 하면 되는데

    윗 div 박스에 col-6을 옮기면 해결될듯요 

    #18607

    박주연
    참가자

    네네 그것도 이미 해봤었어요ㅠㅜ 맨 첨에 상위 div인 <div class="card-group container>에 col-6 col-md-4 줬는데도 크기가 아래처럼 맘대로 변해서 card 클래스에 col을 주니 padding 이 들어가지만 크기가 안변해서 쓴거에요ㅠ

    <div class="card-group container col-6 col-md-4">

    </div>

    말씀해 주신대로 위에 처럼 고치면 아래처럼 되요.

    #18609

    codingapple
    키 마스터

    <div class="container">

      <div class="row">

        <div class="col-6">  카드 내용 </div>

        <div class="col-6">  카드 내용 </div>

        <div class="col-6">  카드 내용 </div>

     

    row 쪼갤 땐 이런 식으로 써야합니다 card-group은 뺍시다

    #18611

    박주연
    참가자

    말씀 해주신데로 하니 잘 됩니다! 

    다만 card들 사이에 padding이 또 들어가서 pad라는 클래스 더해 준 다음에 css에서 padding-right: 0px; padding-left: 0px; 주니까 이제 정상적으로 보입니다!

    템플릿 부분이 반복 되어서 function 으로 하나 만들어 주었습니다.

    혹시 다른 분들께 도움될까 하여 올려봅니다.

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

        <!-- main.css -->
        <link rel="stylesheet" href="main.css">
        <script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
       
       
        <title>Document</title>
    </head>
    <body>

      <div class="container">
        <div class="row">
         
        </div>
      </div>

      <div class="container my-4">
        <button class="btn btn-danger sort-price">가격순 정렬</button>
        <button class="btn btn-primary sort-title">가나다순 정렬</button>
        <input id=filterInput>
        <button class="btn btn-primary filter">이하 보기</button>
        <button class="btn btn-warning original">원래대로</button>
      </div>
     
      <script>
        var products = [
          { id : 0, price : 71000, title : 'Blossom Dress' },
          { id : 1, price : 50000, title : 'Springfield Shirt' },
          { id : 2, price : 60000, title : 'Black Monastery' }
        ]

        function 템플릿(i){
          var 템플릿 = `<div class="col-6 col-md-4 pad">  //pad 라는 클래스 만들어서 넣어줘야 카드 사이에 padding 없어짐  
                          <div class="card">                                            // css파일에 추가하셈     .pad{    padding-right:0px;     padding-left:0px; }
                            <img src="https://via.placeholder.com/600">
                            <div class="card-body">
                              <h5 class="title">${i.title}</h5>
                              <p class="price">가격 : ${i.price}</p>
                              <button class="btn btn-danger">주문하기</button>
                            </div>
                          </div>  
                        </div>`;  
                         
            $('.row').append(템플릿);
        }

        
        //페이지 접속 시 처음 보여줄 리스트
        products.forEach(function(i, index) {
            템플릿(i);        
        });

     

        //원래대로 버튼 누를 때 

        $('.original').click(function(){
          $('.row').html('');
            products.forEach(function(i, index) {
              템플릿(i);
            });
        });

        //--- 가격 오름차순 정렬 ---//
         $('.sort-price').click(function(){

          var newProducts = [... products];   // array 복사본 만들 때 spread operator 이용
          newProducts.sort(function(a, b){   //정렬
            return a.price - b.price;
          });
         
          newProducts.forEach(function(i, index) {      
            $('.price').eq(index).html('가격: '+ i.price);
            $('.title').eq(index).html(i.title);        
           })
       
        })

         

        //--- 제목오름차순 정렬 ---//

        $('.sort-title').click(function(){
          var newProducts = [... products];
          newProducts.sort(function(a, b){   //정렬
            if( a.title < b.title ){return -1;}//글자 내림차순
            else {return 1;}
          });
         
          newProducts.forEach(function(i, index) {      
            $('.price').eq(index).html('가격: '+ i.price);
            $('.title').eq(index).html(i.title);        
           })    
        })

        //---- 가격 필터링----//

        $('.filter').click(function(){
          var filterInput = $('#filterInput').val();

          if(!filterInput) {
            alert('값을 입력하시오');
          } else {
            var newProducts = products.filter(function(a){
              return a.price <= filterInput;
            })
            console.log(newProducts);

            $('.row').html('');
            newProducts.forEach(function(i, index) {
             
              템플릿(i);       
            })
          }
        })

      </script>
         
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    </body>
    </html>

5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠