2017-07-20 36 views
0
var filtered_value = $(this).attr("filterset"); 
    var filter_attribute = $(this).parent().parent().attr('data-facet'); 
    var count = 0; 
    var filtered_json = []; 
    $.getJSON('<?php echo $jsonFileUrl;?>', function (json) { 
     for (var i = 0; i < json.length; i++) { 
      if(json[i][filter_attribute] == filtered_value){ 
       count++; 
       filtered_json.push(json[i]); 
      } 
     } 
     //console.log(filtered_json); 
     var filterList = $.parseJSON(filtered_json); 
     console.log(filterList);return false; 
     var html = ''; 
     for (x in filterList) { 
      html += '<li>' + filterList[x].name 
     } 
    }); 

Ich habe diesen Code in meiner Produktliste Seite. Und ich bekomme Produkte von JSON-Datei. Jetzt möchte ich diese Produkte nach Größe, Farbe, Preis filtern. Wie kann ich gefilterte JSON-Daten zum Erstellen von li verwenden? ? Ich erhalte Nullwert in der Konsole :(Wie json Daten filtern und auf HTML-Seite anzeigen?

+0

Können Sie uns auch Ihren HTML-Code geben? So können wir sehen, wie die Struktur der Produkte aussehen –

+0

So ist Json eine Reihe von Produkten? Wenn ja, können Sie die Funktion Array.filter() nutzen. Dies wird eine Reihe von Produkten zurückgeben, die die Prüfung bestehen. Dann erstellen Sie einfach Ihren HTML-Code, indem Sie ihn mit Produkteigenschaften aus dem gefilterten Array füllen. – patrykf

Antwort

1

// external js: isotope.pkgd.js 
 

 
// init Isotope 
 
var $grid = $('.grid').isotope({ 
 
    itemSelector: '.element-item', 
 
    layoutMode: 'fitRows', 
 
    getSortData: { 
 
    name: '.name', 
 
    symbol: '.symbol', 
 
    number: '.number parseInt', 
 
    category: '[data-category]', 
 
    weight: function(itemElem) { 
 
     var weight = $(itemElem).find('.weight').text(); 
 
     return parseFloat(weight.replace(/[\(\)]/g, '')); 
 
    } 
 
    } 
 
}); 
 

 
// filter functions 
 
var filterFns = { 
 
    // show if number is greater than 50 
 
    numberGreaterThan50: function() { 
 
    var number = $(this).find('.number').text(); 
 
    return parseInt(number, 10) > 50; 
 
    }, 
 
    // show if name ends with -ium 
 
    ium: function() { 
 
    var name = $(this).find('.name').text(); 
 
    return name.match(/ium$/); 
 
    } 
 
}; 
 

 
// bind filter button click 
 
$('#filters').on('click', 'button', function() { 
 
    var filterValue = $(this).attr('data-filter'); 
 
    // use filterFn if matches value 
 
    filterValue = filterFns[ filterValue ] || filterValue; 
 
    $grid.isotope({ filter: filterValue }); 
 
}); 
 

 
// bind sort button click 
 
$('#sorts').on('click', 'button', function() { 
 
    var sortByValue = $(this).attr('data-sort-by'); 
 
    $grid.isotope({ sortBy: sortByValue }); 
 
}); 
 

 
// change is-checked class on buttons 
 
$('.button-group').each(function(i, buttonGroup) { 
 
    var $buttonGroup = $(buttonGroup); 
 
    $buttonGroup.on('click', 'button', function() { 
 
    $buttonGroup.find('.is-checked').removeClass('is-checked'); 
 
    $(this).addClass('is-checked'); 
 
    }); 
 
});
* { box-sizing: border-box; } 
 

 
body { 
 
    font-family: sans-serif; 
 
} 
 

 

 

 
.button { 
 
    display: inline-block; 
 
    padding: 0.5em 1.0em; 
 
    background: #EEE; 
 
    border: none; 
 
    border-radius: 7px; 
 
    background-image: linear-gradient(to bottom, hsla(0, 0%, 0%, 0), hsla(0, 0%, 0%, 0.2)); 
 
    color: #222; 
 
    font-family: sans-serif; 
 
    font-size: 16px; 
 
    text-shadow: 0 1px white; 
 
    cursor: pointer; 
 
} 
 

 
.button:hover { 
 
    background-color: #8CF; 
 
    text-shadow: 0 1px hsla(0, 0%, 100%, 0.5); 
 
    color: #222; 
 
} 
 

 
.button:active, 
 
.button.is-checked { 
 
    background-color: #28F; 
 
} 
 

 
.button.is-checked { 
 
    color: white; 
 
    text-shadow: 0 -1px hsla(0, 0%, 0%, 0.8); 
 
} 
 

 
.button:active { 
 
    box-shadow: inset 0 1px 10px hsla(0, 0%, 0%, 0.8); 
 
} 
 

 
/* ---- button-group ---- */ 
 

 
.button-group { 
 
    margin-bottom: 20px; 
 
} 
 

 
.button-group:after { 
 
    content: ''; 
 
    display: block; 
 
    clear: both; 
 
} 
 

 
.button-group .button { 
 
    float: left; 
 
    border-radius: 0; 
 
    margin-left: 0; 
 
    margin-right: 1px; 
 
} 
 

 
.button-group .button:first-child { border-radius: 0.5em 0 0 0.5em; } 
 
.button-group .button:last-child { border-radius: 0 0.5em 0.5em 0; } 
 

 
/* ---- isotope ---- */ 
 

 
.grid { 
 
    border: 1px solid #333; 
 
} 
 

 
/* clear fix */ 
 
.grid:after { 
 
    content: ''; 
 
    display: block; 
 
    clear: both; 
 
} 
 

 
/* ---- .element-item ---- */ 
 

 
.element-item { 
 
    position: relative; 
 
    float: left; 
 
    width: 100px; 
 
    height: 100px; 
 
    margin: 5px; 
 
    padding: 10px; 
 
    background: #888; 
 
    color: #262524; 
 
} 
 

 
.element-item > * { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.element-item .name { 
 
    position: absolute; 
 

 
    left: 10px; 
 
    top: 60px; 
 
    text-transform: none; 
 
    letter-spacing: 0; 
 
    font-size: 12px; 
 
    font-weight: normal; 
 
} 
 

 
.element-item .symbol { 
 
    position: absolute; 
 
    left: 10px; 
 
    top: 0px; 
 
    font-size: 42px; 
 
    font-weight: bold; 
 
    color: white; 
 
} 
 

 
.element-item .number { 
 
    position: absolute; 
 
    right: 8px; 
 
    top: 5px; 
 
} 
 

 
.element-item .weight { 
 
    position: absolute; 
 
    left: 10px; 
 
    top: 76px; 
 
    font-size: 12px; 
 
} 
 

 
.element-item.alkali   { background: #F00; background: hsl( 0, 100%, 50%); } 
 
.element-item.alkaline-earth { background: #F80; background: hsl( 36, 100%, 50%); } 
 
.element-item.lanthanoid  { background: #FF0; background: hsl( 72, 100%, 50%); } 
 
.element-item.actinoid  { background: #0F0; background: hsl(108, 100%, 50%); } 
 
.element-item.transition  { background: #0F8; background: hsl(144, 100%, 50%); } 
 
.element-item.post-transition { background: #0FF; background: hsl(180, 100%, 50%); } 
 
.element-item.metalloid  { background: #08F; background: hsl(216, 100%, 50%); } 
 
.element-item.diatomic  { background: #00F; background: hsl(252, 100%, 50%); } 
 
.element-item.halogen   { background: #F0F; background: hsl(288, 100%, 50%); } 
 
.element-item.noble-gas  { background: #F08; background: hsl(324, 100%, 50%); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
 
<script src="https://npmcdn.com/[email protected]/dist/isotope.pkgd.js"></script> 
 
<h2>Filter</h2> 
 
<div id="filters" class="button-group"> <button class="button is-checked" data-filter="*">show all</button> 
 
    <button class="button" data-filter=".metal">metal</button> 
 
    <button class="button" data-filter=".transition">transition</button> 
 
    <button class="button" data-filter=".alkali, .alkaline-earth">alkali and alkaline-earth</button> 
 
    <button class="button" data-filter=":not(.transition)">not transition</button> 
 
    <button class="button" data-filter=".metal:not(.transition)">metal but not transition</button> 
 
    <button class="button" data-filter="numberGreaterThan50">number > 50</button> 
 
    <button class="button" data-filter="ium">name ends with &ndash;ium</button> 
 
</div> 
 

 
<h2>Sort</h2> 
 
<div id="sorts" class="button-group"> <button class="button is-checked" data-sort-by="original-order">original order</button> 
 
    <button class="button" data-sort-by="name">name</button> 
 
    <button class="button" data-sort-by="symbol">symbol</button> 
 
    <button class="button" data-sort-by="number">number</button> 
 
    <button class="button" data-sort-by="weight">weight</button> 
 
    <button class="button" data-sort-by="category">category</button> 
 
</div> 
 

 
<div class="grid"> 
 
    <div class="element-item transition metal " data-category="transition"> 
 
    <h3 class="name">Mercury</h3> 
 
    <p class="symbol">Hg</p> 
 
    <p class="number">80</p> 
 
    <p class="weight">200.59</p> 
 
    </div> 
 
    <div class="element-item metalloid " data-category="metalloid"> 
 
    <h3 class="name">Tellurium</h3> 
 
    <p class="symbol">Te</p> 
 
    <p class="number">52</p> 
 
    <p class="weight">127.6</p> 
 
    </div> 
 
    <div class="element-item post-transition metal " data-category="post-transition"> 
 
    <h3 class="name">Bismuth</h3> 
 
    <p class="symbol">Bi</p> 
 
    <p class="number">83</p> 
 
    <p class="weight">208.980</p> 
 
    </div> 
 
    <div class="element-item post-transition metal " data-category="post-transition"> 
 
    <h3 class="name">Lead</h3> 
 
    <p class="symbol">Pb</p> 
 
    <p class="number">82</p> 
 
    <p class="weight">207.2</p> 
 
    </div> 
 
    <div class="element-item transition metal " data-category="transition"> 
 
    <h3 class="name">Gold</h3> 
 
    <p class="symbol">Au</p> 
 
    <p class="number">79</p> 
 
    <p class="weight">196.967</p> 
 
    </div> 
 
    <div class="element-item alkali metal " data-category="alkali"> 
 
    <h3 class="name">Potassium</h3> 
 
    <p class="symbol">K</p> 
 
    <p class="number">19</p> 
 
    <p class="weight">39.0983</p> 
 
    </div> 
 
    <div class="element-item alkali metal " data-category="alkali"> 
 
    <h3 class="name">Sodium</h3> 
 
    <p class="symbol">Na</p> 
 
    <p class="number">11</p> 
 
    <p class="weight">22.99</p> 
 
    </div> 
 
    <div class="element-item transition metal " data-category="transition"> 
 
    <h3 class="name">Cadmium</h3> 
 
    <p class="symbol">Cd</p> 
 
    <p class="number">48</p> 
 
    <p class="weight">112.411</p> 
 
    </div> 
 
    <div class="element-item alkaline-earth metal " data-category="alkaline-earth"> 
 
    <h3 class="name">Calcium</h3> 
 
    <p class="symbol">Ca</p> 
 
    <p class="number">20</p> 
 
    <p class="weight">40.078</p> 
 
    </div> 
 
    <div class="element-item transition metal " data-category="transition"> 
 
    <h3 class="name">Rhenium</h3> 
 
    <p class="symbol">Re</p> 
 
    <p class="number">75</p> 
 
    <p class="weight">186.207</p> 
 
    </div> 
 
    <div class="element-item post-transition metal " data-category="post-transition"> 
 
    <h3 class="name">Thallium</h3> 
 
    <p class="symbol">Tl</p> 
 
    <p class="number">81</p> 
 
    <p class="weight">204.383</p> 
 
    </div> 
 
    <div class="element-item metalloid " data-category="metalloid"> 
 
    <h3 class="name">Antimony</h3> 
 
    <p class="symbol">Sb</p> 
 
    <p class="number">51</p> 
 
    <p class="weight">121.76</p> 
 
    </div> 
 
    <div class="element-item transition metal " data-category="transition"> 
 
    <h3 class="name">Cobalt</h3> 
 
    <p class="symbol">Co</p> 
 
    <p class="number">27</p> 
 
    <p class="weight">58.933</p> 
 
    </div> 
 
    <div class="element-item lanthanoid metal inner-transition " data-category="lanthanoid"> 
 
    <h3 class="name">Ytterbium</h3> 
 
    <p class="symbol">Yb</p> 
 
    <p class="number">70</p> 
 
    <p class="weight">173.054</p> 
 
    </div> 
 
    <div class="element-item noble-gas nonmetal " data-category="noble-gas"> 
 
    <h3 class="name">Argon</h3> 
 
    <p class="symbol">Ar</p> 
 
    <p class="number">18</p> 
 
    <p class="weight">39.948</p> 
 
    </div> 
 
    <div class="element-item diatomic nonmetal " data-category="diatomic"> 
 
    <h3 class="name">Nitrogen</h3> 
 
    <p class="symbol">N</p> 
 
    <p class="number">7</p> 
 
    <p class="weight">14.007</p> 
 
    </div> 
 
    <div class="element-item actinoid metal inner-transition " data-category="actinoid"> 
 
    <h3 class="name">Uranium</h3> 
 
    <p class="symbol">U</p> 
 
    <p class="number">92</p> 
 
    <p class="weight">238.029</p> 
 
    </div> 
 
    <div class="element-item actinoid metal inner-transition " data-category="actinoid"> 
 
    <h3 class="name">Plutonium</h3> 
 
    <p class="symbol">Pu</p> 
 
    <p class="number">94</p> 
 
    <p class="weight">(244)</p> 
 
    </div> 
 
</div>

+0

Dies ist ein komplettes Plugin. Sie können Elemente basierend auf Json erstellen. Hoffe, nützlich zu sein. Viel Glück –

+0

Benötigen Sie weitere Erklärungen in diesen Fällen? –

0

Dies funktioniert:

Javascript-Version -

function tree(data) {  
    if (typeof(data) == 'object') { 
     document.write('<ul>'); 
     for (var i in data) { 
      document.write('<li>' + i); 
      tree(data[i]);    
     } 
     document.write('</ul>'); 
    } else { 
     document.write(' => ' + data); 
    } 
} 

jQuery-Version -

function tree(data) {  
    if (typeof(data) == 'object') {   
     var ul = $('<ul>'); 
     for (var i in data) {    
      ul.append($('<li>').text(i).append(tree(data[i])));   
     }   
     return ul; 
    } else {  
     var textNode = document.createTextNode(' => ' + data); 
     return textNode; 
    } 
} 

$(document.body).append(tree(data));