2017-07-20 17 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 
     } 
    }); 

私の商品リストページにこのコードがあります。そして、私はjsonファイルから製品を入手しています。今私はサイズ、色、価格に基づいてこの製品をフィルタリングしたい。 ビルドされたjsonデータをビルドに使用するにはどうすればよいですか? 私はコンソールにnull値を取得しています:(jsonデータをフィルタリングしてhtmlページに表示するには?

+0

あなたのHTMLも教えていただけますか?したがって、製品の構造がどのように見えるかを見ることができます –

+0

jsonは製品の配列ですか?もしそうなら、あなたはArray.filter()関数を得ることができます。これは、チェックに合格する製品の配列を返します。その後、フィルタリングされた配列から製品のプロパティを埋め込むようにHTMLを構築するだけです。 – patrykf

答えて

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

これは完全なプラグインです。 Jsonに基づいて要素を作成できます。役に立つと願っています。幸運 –

+0

これらのケースでさらに説明が必要ですか? –

0

これは動作します:

JavaScriptバージョン -

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のバージョン -

を?
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)); 
関連する問題