通过选择选项对表数据进行JavaScript排序

时间:2019-11-12 12:06:49

标签: javascript jquery html json

我正在从JSON文件中获取数据并将其呈现到表中,但是我需要使用选择选项通过评分和投票对数据进行排序,但我尝试了不同的方法,但没有一种起作用。

这是我的代码的链接:https://jsfiddle.net/natefr0st/596ew8zc/5/

我尝试使用querySelectorAll获得评分,并循环浏览每个评分,然后对其进行排序,但是没有用,尝试了其他不同的方法,并且再次没有结果

const sortMenu = document.getElementById('sort');
sortMenu.addEventListener('change', sortTable);

function sortTable() {
    const rating = document.querySelectorAll('.rating')
    // rating.forEach((val, i) => console.log(val.innerHTML));

    // function compare(a, b) {
    //  return a.imdb_rating > b.imdb_rating ? 1 : -1;
    // }    

    if(sortMenu.value == 1) {
        rating.forEach(function(val, index) {
            let ratingArr = Array.from(val.innerHTML);
            return ratingArr.sort();
        });
    } 
}

2 个答案:

答案 0 :(得分:1)

使用以下代码库。仅供参考,我已经在您的小提琴中对其进行了测试。

    let movies = [];
    const url = 'url';

   $.getJSON(url, (data) => {
        start(data, true)
    });

   function start(data, init=false) {
      movies = data
      displayMovies();
      if (init) {
          setPages();
      }
   }

    // Render 10 Rows Per Page
    // ========================
    function displayMovies(page = 1) {
        let movie_data = '';
        let max = page * 10;
        let min = max - 10;

        for (let i = min; i < max; i++) {
            let movie = movies[i];
            if (movie) {
                movie_data += `<tr class="movie-row">
                        <td scope="row">${movie.id}</td>
                        <td>${movie.title}</td>
                        <td>${movie.director}</td>
                        <td>${movie.distributor}</td>
                        <td class="rating">${movie.imdb_rating}</td>
                        <td class="votes">${movie.imdb_votes}</td>
                        <td><button type="button" class="btn btn-danger">Delete</button></td>
                    </tr>`;
            } else {
                break;
            }
        }

        $('#movies').html(movie_data);
    }

    // Render Pagination Buttons to the Table
    // =======================================
    function setPages() {
        let nbPages = Math.ceil(movies.length / 10);
        let pages = '';
        for (let i = 1; i <= nbPages; i++) {
            pages +=
                '<button class="btn btn-outline-info page-btn" type="button" page="' + i + '">Page ' + i + '</button>';
        }
        $('#pages').append(pages);
        $('.page-btn').click(function () {
            displayMovies($(this).attr('page'));
        });
    }

  // Sort Table TODO
    // ================
    const sortMenu = document.getElementById('sort');
    sortMenu.addEventListener('change', sortTable);

    function sortTable() {
        switch(parseInt(sortMenu.value)) {
            case 1:
                movies.sort((a, b) => (a.imdb_votes - b.imdb_votes));
                start(movies);
                break;
            case 2:
                movies.sort((a, b) => (b.imdb_votes - a.imdb_votes));
                start(movies);
                break;
            case 3: 
                movies.sort((a, b) => (a.imdb_rating - b.imdb_rating));
                start(movies);
                break;
            case 4:
                movies.sort((a, b) => (b.imdb_rating - a.imdb_rating));
                start(movies);
                break;
            default:
                break;
        }
    }

答案 1 :(得分:0)

为什么不使用下面的内容就使生活变得轻松

让jquery datatable插件为您创建自己的HTML生成HTML,如果 下面的链接可以满足您的要求,这是最好的方法。

https://datatables.net/examples/data_sources/js_array.html