Hello, World!!

むずかしいことはかけません

JavaScriptでデータを絞り込んで表示させたい

例えば各ステータスで絞り込んだデータを画面遷移せずに画面に表示させたい場合
LaravelとJavaScriptで実装したパターンとHTMLとJavaScriptで実装したパターンを載せます。

LaravelとJavaScript

Laravelの書き方だとCodePenで動かないのでそのままこちらに載せます。

<div>
    <label>
        {!! Form::radio('check_status', 0, true, ['onchange' => 'check_status()']) !!}
        <i class="icon"></i>すべて
    </label>
    <label>
        {!! Form::radio('check_status', 10, false, ['onchange' => 'check_status()']) !!}
        <i class="icon"></i>合格
    </label>
    <label>
        {!! Form::radio('check_status', 20, false, ['onchange' => 'check_status()']) !!}
        <i class="icon"></i>不合格
    </label>
</div>

<div id="show">
{{-- ※ここに絞り込んだデータが表示される --}}
</div>
<script>
    function check_status() {
      var checkStatus = document.getElementsByName("check_status");
      
        // データの取得
        var students = @json($students);

        // ラジオボタンでデータ絞込み
        if (checkStatus[0].checked) { // すべて 
            var studentList = students.data;
            ArrayByJson(studentList);
        } else if (checkStatus[1].checked) { // 合格
            var statusId=checkStatus[1].value;
            var studentList = students.data.filter(function(x) {
                return x.status == statusId;
            });
            ArrayByJson(studentList);
        } else if (checkStatus[2].checked) { // 不合格
            var statusId=checkStatus[2].value;
            var studentList = students.data.filter(function(x) {
                return x.status == statusId;
            });
            ArrayByJson(studentList);
        }
    }

    // データ表示
    function ArrayByJson(studentList){
        clear();
        for(var i = 0; i < studentList.length; i++){
            document.getElementById('show').insertAdjacentHTML('beforeend', studentList[i].user.last_name + '<br>');
        }
    }
     
    // 表示されたデータの初期化
    function clear(){
        document.getElementById('show').textContent = '';
    }
     
</script>

HTMLとJavaScript

以下のデータを絞り込みます。

var students = [
        {id:1, name:"yamada", status:10},
        {id:2, name:"tanaka", status:30},
        {id:3, name:"saitou", status:20},
    ];

See the Pen check_box by ひややっこ (@to_fu) on CodePen.

参考サイト