我正在从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();
});
}
}
答案 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,如果 下面的链接可以满足您的要求,这是最好的方法。