• 14-08-2018, 18:03:44
    #1
    Merhaba arkadaşlar, internette bir kod buldum javascript ile öğeleri filtrelemek için, ancak bu kodda div e göre filtreleme yapıyor, benim yapmak istediğim div içinde yazan metine göre filtreleme yapması. Örneğin cars sekmesinde içinde "car" sözlüğü geçtiği için o öğeleri filtrelemesini istiyorum. Umarım anlatabilmişimdir.
    Kod şu şekilde:
    <!DOCTYPE html>
    <html>
    <style>
    .filterDiv {
      float: left;
      background-color: #2196F3;
      color: #ffffff;
      width: 100px;
      line-height: 100px;
      text-align: center;
      margin: 2px;
      display: none;
    }
    
    .show {
      display: block;
    }
    
    .container {
      margin-top: 20px;
      overflow: hidden;
    }
    
    /* Style the buttons */
    .btn {
      border: none;
      outline: none;
      padding: 12px 16px;
      background-color: #f1f1f1;
      cursor: pointer;
    }
    
    .btn:hover {
      background-color: #ddd;
    }
    
    .btn.active {
      background-color: #666;
      color: white;
    }
    </style>
    <body>
    
    <div id="myBtnContainer">
      <button class="btn active" onclick="filterSelection('cars')"> Cars</button>
      <button class="btn" onclick="filterSelection('animals')"> Animals</button>
      <button class="btn" onclick="filterSelection('fruits')"> Fruits</button>
      <button class="btn" onclick="filterSelection('colors')"> Colors</button>
    </div>
    
    <div class="container">
      <div class="filterDiv cars">Car 1</div>
      <div class="filterDiv cars">Car 2</div>
      <div class="filterDiv cars">Car 3</div>
      <div class="filterDiv colors">Color 1</div>
      <div class="filterDiv colors">Color 2</div>
      <div class="filterDiv colors">Color 3</div>
      <div class="filterDiv animals">Animal 1</div>
      <div class="filterDiv animals">Animal 2</div>
      <div class="filterDiv animals">Animal 3</div>
      <div class="filterDiv fruits">Fruit 1</div>
      <div class="filterDiv fruits">Fruit 2</div>
      <div class="filterDiv fruits">Fruit 3</div>
      <div class="filterDiv fruits">Fruit 4</div>
    </div>
    
    <script>
    filterSelection("cars")
    function filterSelection(c) {
      var x, i;
      x = document.getElementsByClassName("filterDiv");
      if (c == "all") c = "";
      for (i = 0; i < x.length; i++) {
        w3RemoveClass(x[i], "show");
        if (x[i].className.indexOf(c) > -1) w3AddClass(x[i], "show");
      }
    }
    
    function w3AddClass(element, name) {
      var i, arr1, arr2;
      arr1 = element.className.split(" ");
      arr2 = name.split(" ");
      for (i = 0; i < arr2.length; i++) {
        if (arr1.indexOf(arr2[i]) == -1) {element.className += " " + arr2[i];}
      }
    }
    
    function w3RemoveClass(element, name) {
      var i, arr1, arr2;
      arr1 = element.className.split(" ");
      arr2 = name.split(" ");
      for (i = 0; i < arr2.length; i++) {
        while (arr1.indexOf(arr2[i]) > -1) {
          arr1.splice(arr1.indexOf(arr2[i]), 1);    
        }
      }
      element.className = arr1.join(" ");
    }
    
    // Add active class to the current button (highlight it)
    var btnContainer = document.getElementById("myBtnContainer");
    var btns = btnContainer.getElementsByClassName("btn");
    for (var i = 0; i < btns.length; i++) {
      btns[i].addEventListener("click", function(){
        var current = document.getElementsByClassName("active");
        current[0].className = current[0].className.replace(" active", "");
        this.className += " active";
      });
    }
    </script>
    
    </body>
    </html>
  • 15-08-2018, 13:43:06
    #2
    Verdiğin kodları düzenledim. Aşağıdaki kod işini görücektir.
    <!DOCTYPE html>
    <html lang="tr">
    <style>
    .filterDiv {
      float: left;
      background-color: #2196F3;
      color: #ffffff;
      width: 100px;
      line-height: 100px;
      text-align: center;
      margin: 2px;
      display: none;
    }
     
    .show {
      display: block;
    }
     
    .container {
      margin-top: 20px;
      overflow: hidden;
    }
     
    /* Style the buttons */
    .btn {
      border: none;
      outline: none;
      padding: 12px 16px;
      background-color: #f1f1f1;
      cursor: pointer;
    }
     
    .btn:hover {
      background-color: #ddd;
    }
     
    .btn.active {
      background-color: #666;
      color: white;
    }
    </style>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <body>
     
    <div id="myBtnContainer">
      <button class="btn active" onclick="filterSelection('car')"> Cars</button>
      <button class="btn" onclick="filterSelection('animal')"> Animals</button>
      <button class="btn" onclick="filterSelection('fruit')"> Fruits</button>
      <button class="btn" onclick="filterSelection('color')"> Colors</button>
    </div>
     
    <div class="container">
      <div class="filterDiv cars">Car 1</div>
      <div class="filterDiv cars">Car 2</div>
      <div class="filterDiv cars">Car 3</div>
      <div class="filterDiv colors">Color 1</div>
      <div class="filterDiv colors">Color 2</div>
      <div class="filterDiv colors">Color 3</div>
      <div class="filterDiv animals">Animal 1</div>
      <div class="filterDiv animals">Animal 2</div>
      <div class="filterDiv animals">Animal 3</div>
      <div class="filterDiv fruits">Fruit 1</div>
      <div class="filterDiv fruits">Fruit 2</div>
      <div class="filterDiv fruits">Fruit 3</div>
      <div class="filterDiv fruits">Fruit 4</div>
    </div>
     
    <script>
    $.expr[":"].contains = $.expr.createPseudo(function(arg) {
        return function( elem ) {
            return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
        };
    });
    function filterSelection(p)
    {
      $('.filterDiv').removeClass("show");
      $('.filterDiv:contains("'+p+'")').addClass("show");
    }
    </script>
     
    </body>
    </html>
  • 15-08-2018, 15:59:31
    #3
    Hocam çok teşekkür ederim. Eski koddaki gibi Cars sekmesinin default olarak açık olmasını, bir de hangi button seçiliyse o butonun koyu olmasını nasıl sağlayabilirim? Kolay gelsin.



    Hocam şimdi kendim hallettim tekrardan çok teşekkürler.
  • 15-08-2018, 16:25:20
    #4
    * onclick fonksiyonunu kaldırdım.
    * search-text özelliğine aranacak yazıyı yazabilirsin.

    <!DOCTYPE html>
    <html lang="tr">
    <style>
    .filterDiv {
      float: left;
      background-color: #2196F3;
      color: #ffffff;
      width: 100px;
      line-height: 100px;
      text-align: center;
      margin: 2px;
      display: none;
    }
     
    .show {
      display: block;
    }
     
    .container {
      margin-top: 20px;
      overflow: hidden;
    }
     
    /* Style the buttons */
    .btn {
      border: none;
      outline: none;
      padding: 12px 16px;
      background-color: #f1f1f1;
      cursor: pointer;
    }
     
    .btn:hover {
      background-color: #ddd;
    }
     
    .btn.active {
      background-color: #666;
      color: white;
    }
    </style>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <body>
     
    <div id="myBtnContainer">
      <button class="btn active" search-text="car"> Cars</button>
      <button class="btn" search-text="animal"> Animals</button>
      <button class="btn" search-text="fruit"> Fruits</button>
      <button class="btn" search-text="color"> Colors</button>
    </div>
     
    <div class="container">
      <div class="filterDiv cars">Car 1</div>
      <div class="filterDiv cars">Car 2</div>
      <div class="filterDiv cars">Car 3</div>
      <div class="filterDiv colors">Color 1</div>
      <div class="filterDiv colors">Color 2</div>
      <div class="filterDiv colors">Color 3</div>
      <div class="filterDiv animals">Animal 1</div>
      <div class="filterDiv animals">Animal 2</div>
      <div class="filterDiv animals">Animal 3</div>
      <div class="filterDiv fruits">Fruit 1</div>
      <div class="filterDiv fruits">Fruit 2</div>
      <div class="filterDiv fruits">Fruit 3</div>
      <div class="filterDiv fruits">Fruit 4</div>
    </div>
     
    <script>
    $.expr[":"].contains = $.expr.createPseudo(function(arg) {
        return function( elem ) {
            return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
        };
    });
    
    $("#myBtnContainer .btn").click(function (){
    var p = $(this).attr("search-text");
    $(".btn").removeClass("active");
    $(this).addClass("active");
      $('.filterDiv').removeClass("show");
      $('.filterDiv:contains("'+p+'")').addClass("show");
    });
    
    $("#myBtnContainer .active").click();
    
    </script>
     
    </body>
    </html>
  • 15-08-2018, 16:32:48
    #5
    Hocam bu şekilde daha kullanışlı oldu teşekkürler, peki bu kodda ilk sekmeyi açık olacak şekilde nasıl ayarlayacağım?
  • 15-08-2018, 16:38:41
    #6
    fcs adlı üyeden alıntı: mesajı görüntüle
    Hocam bu şekilde daha kullanışlı oldu teşekkürler, peki bu kodda ilk sekmeyi açık olacak şekilde nasıl ayarlayacağım?
    Dener misin?
    <!DOCTYPE html>
    <html lang="tr">
    <style>
    .filterDiv {
      float: left;
      background-color: #2196F3;
      color: #ffffff;
      width: 100px;
      line-height: 100px;
      text-align: center;
      margin: 2px;
      display: none;
    }
      
    .show {
      display: block;
    }
      
    .container {
      margin-top: 20px;
      overflow: hidden;
    }
      
    /* Style the buttons */
    .btn {
      border: none;
      outline: none;
      padding: 12px 16px;
      background-color: #f1f1f1;
      cursor: pointer;
    }
      
    .btn:hover {
      background-color: #ddd;
    }
      
    .btn.active {
      background-color: #666;
      color: white;
    }
    </style>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <body>
      
    <div id="myBtnContainer">
      <button class="btn active" search-text="car"> Cars</button>
      <button class="btn" search-text="animal"> Animals</button>
      <button class="btn" search-text="fruit"> Fruits</button>
      <button class="btn" search-text="color"> Colors</button>
    </div>
      
    <div class="container">
      <div class="filterDiv cars">Car 1</div>
      <div class="filterDiv cars">Car 2</div>
      <div class="filterDiv cars">Car 3</div>
      <div class="filterDiv colors">Color 1</div>
      <div class="filterDiv colors">Color 2</div>
      <div class="filterDiv colors">Color 3</div>
      <div class="filterDiv animals">Animal 1</div>
      <div class="filterDiv animals">Animal 2</div>
      <div class="filterDiv animals">Animal 3</div>
      <div class="filterDiv fruits">Fruit 1</div>
      <div class="filterDiv fruits">Fruit 2</div>
      <div class="filterDiv fruits">Fruit 3</div>
      <div class="filterDiv fruits">Fruit 4</div>
    </div>
      
    <script type="text/javascript">
     $(document).ready(function() {
    $.expr[":"].contains = $.expr.createPseudo(function(arg) {
        return function( elem ) {
            return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
        };
    });
     
    $("#myBtnContainer .btn").click(function (){
    var p = $(this).attr("search-text");
    $(".btn").removeClass("active");
    $(this).addClass("active");
      $('.filterDiv').removeClass("show");
      $('.filterDiv:contains("'+p+'")').addClass("show");
    });
    $("#myBtnContainer .btn.active").trigger("click");
     });
    </script>
      
    </body>
    </html>
  • 15-08-2018, 16:46:45
    #7
    Çok teşekkürler, oldu.

    Onur89TR adlı üyeden alıntı: mesajı görüntüle
    Dener misin?
    Onur89TR adlı üyeden alıntı: mesajı görüntüle
    <!DOCTYPE html>
    <html lang="tr">
    <style>
    .filterDiv {
      float: left;
      background-color: #2196F3;
      color: #ffffff;
      width: 100px;
      line-height: 100px;
      text-align: center;
      margin: 2px;
      display: none;
    }
      
    .show {
      display: block;
    }
      
    .container {
      margin-top: 20px;
      overflow: hidden;
    }
      
    /* Style the buttons */
    .btn {
      border: none;
      outline: none;
      padding: 12px 16px;
      background-color: #f1f1f1;
      cursor: pointer;
    }
      
    .btn:hover {
      background-color: #ddd;
    }
      
    .btn.active {
      background-color: #666;
      color: white;
    }
    </style>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <body>
      
    <div id="myBtnContainer">
      <button class="btn active" search-text="car"> Cars</button>
      <button class="btn" search-text="animal"> Animals</button>
      <button class="btn" search-text="fruit"> Fruits</button>
      <button class="btn" search-text="color"> Colors</button>
    </div>
      
    <div class="container">
      <div class="filterDiv cars">Car 1</div>
      <div class="filterDiv cars">Car 2</div>
      <div class="filterDiv cars">Car 3</div>
      <div class="filterDiv colors">Color 1</div>
      <div class="filterDiv colors">Color 2</div>
      <div class="filterDiv colors">Color 3</div>
      <div class="filterDiv animals">Animal 1</div>
      <div class="filterDiv animals">Animal 2</div>
      <div class="filterDiv animals">Animal 3</div>
      <div class="filterDiv fruits">Fruit 1</div>
      <div class="filterDiv fruits">Fruit 2</div>
      <div class="filterDiv fruits">Fruit 3</div>
      <div class="filterDiv fruits">Fruit 4</div>
    </div>
      
    <script type="text/javascript">
     $(document).ready(function() {
    $.expr[":"].contains = $.expr.createPseudo(function(arg) {
        return function( elem ) {
            return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
        };
    });
     
    $("#myBtnContainer .btn").click(function (){
    var p = $(this).attr("search-text");
    $(".btn").removeClass("active");
    $(this).addClass("active");
      $('.filterDiv').removeClass("show");
      $('.filterDiv:contains("'+p+'")').addClass("show");
    });
    $("#myBtnContainer .btn.active").trigger("click");
     });
    </script>
      
    </body>
    </html>