Bangumi 条目排序

对条目列表进行按排名、人数、评分、时间排序,并可以按人数、时间筛选

  1. // ==UserScript==
  2. // @name Bangumi 条目排序
  3. // @namespace https://github.com/bangumi/scripts/liaune
  4. // @version 1.3
  5. // @description 对条目列表进行按排名、人数、评分、时间排序,并可以按人数、时间筛选
  6. // @author Liaune
  7. // @include /^https?://(bangumi\.tv|bgm\.tv|chii\.in)/(.+?/tag|.+?/browser|subject_search)(/|\?).+/
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12.  
  13. let sortstyle = -1, sortstyle1 = 1,sortstyle2 = 1,sortstyle3 = -1;
  14. //按排名排序
  15. const showBtn = document.createElement('a'); showBtn.addEventListener('click', SortByRank); showBtn.className = 'chiiBtn'; showBtn.href='javascript:;'; showBtn.textContent = '排名排序';document.querySelector('#browserTools').append(showBtn);
  16. //按评分人数排序
  17. const showBtn1 = document.createElement('a'); showBtn1.addEventListener('click', SortByVote); showBtn1.className = 'chiiBtn'; showBtn1.href='javascript:;'; showBtn1.textContent = '人数排序';document.querySelector('#browserTools').append(showBtn1);
  18. //按人数筛选
  19. const voteRange = document.createElement('input');voteRange.addEventListener('blur',Select);voteRange.className = 'textfield';$(voteRange).css({"width":"30px","height":"15px"});document.querySelector('#browserTools').append(voteRange);$(voteRange).hide();
  20. const voteRange1 = document.createElement('input');voteRange1.addEventListener('blur',Select);voteRange1.className = 'textfield';$(voteRange1).css({"width":"30px","height":"15px"});document.querySelector('#browserTools').append(voteRange1);$(voteRange1).hide();
  21. //按评分排序
  22. //const showBtn2 = document.createElement('a'); showBtn2.addEventListener('click', SortByPoint); showBtn2.className = 'chiiBtn'; showBtn2.href='javascript:;'; showBtn2.textContent = '评分排序';document.querySelector('#browserTools').append(showBtn2);
  23. //按时间排序
  24. const showBtn3 = document.createElement('a'); showBtn3.addEventListener('click', SortByTime); showBtn3.className = 'chiiBtn'; showBtn3.href='javascript:;'; showBtn3.textContent = '时间排序';document.querySelector('#browserTools').append(showBtn3);
  25. //按时间筛选
  26. const timeRange = document.createElement('input');timeRange.addEventListener('blur',Select);timeRange.className = 'textfield';$(timeRange).css({"width":"60px","height":"15px"});document.querySelector('#browserTools').append(timeRange);$(timeRange).hide();
  27. const timeRange1 = document.createElement('input');timeRange1.addEventListener('blur',Select);timeRange1.className = 'textfield';$(timeRange1).css({"width":"60px","height":"15px"});document.querySelector('#browserTools').append(timeRange1);$(timeRange1).hide();
  28. function ParseRank(rankstring){
  29. let rank = rankstring.match(/Rank (\d{1,4})/)? rankstring.match(/Rank (\d{1,4})/)[1]: 9999;
  30. return rank;
  31. }
  32. function ParseVote(votestring){
  33. let vote = votestring.match(/(\d{1,5})人评分/)? votestring.match(/(\d{1,5})人评分/)[1]: 0;
  34. return vote;
  35. }
  36. function ParseDate(Datestring){
  37. let yy = Datestring.match(/(\d{4})/)? Datestring.match(/(\d{4})/)[1].toString():'1000';
  38. Datestring = Datestring.match(/(\d{4})(年|-)(\d{1,2})(月|-)(\d{1,2})/);
  39. let year = Datestring ? Datestring[1].toString(): yy;
  40. let month = Datestring ? Datestring[3].toString(): '01';
  41. let day = Datestring ?Datestring[5].toString(): '01';
  42. let date= new Date(year+'/'+month+'/'+day);
  43. let now = new Date();
  44. return now.getTime()-date.getTime();
  45. }
  46.  
  47. function SortByRank() {
  48. let itemsList = document.querySelectorAll('#browserItemList li.item');
  49. sortstyle = (sortstyle==1)? -1 :1;
  50. showBtn.textContent = (showBtn.textContent=='排名排序↑') ? '排名排序↓':'排名排序↑';
  51. let container = document.querySelector('ul#browserItemList');
  52. let arr=[];
  53. for(let i=0;i<itemsList.length;i++) arr[i]=itemsList[i];
  54. arr.sort(function(li1,li2){
  55. let n1=li1.querySelector('.inner .rank')? ParseRank(li1.querySelector('.inner .rank').textContent): 9999;
  56. let n2=li2.querySelector('.inner .rank')? ParseRank(li2.querySelector('.inner .rank').textContent): 9999;
  57. return (n1-n2)*sortstyle;});
  58. for(let i=0; i<arr.length; i++) $('#browserItemList').append(arr[i]);
  59. }
  60.  
  61. function SortByVote() {
  62. $(voteRange).show();$(voteRange1).show();
  63. let itemsList = document.querySelectorAll('#browserItemList li.item');
  64. sortstyle1 = (sortstyle1==-1)? 1 :-1;
  65. showBtn1.textContent = (showBtn1.textContent=='人数排序↓') ? '人数排序↑':'人数排序↓';
  66. let container = document.querySelector('ul#browserItemList');
  67. let arr=[];
  68. for(let i=0;i<itemsList.length;i++) arr[i]=itemsList[i];
  69. arr.sort(function(li1,li2){
  70. let n1=li1.querySelector('.inner .rateInfo .tip_j')? ParseVote(li1.querySelector('.inner .rateInfo .tip_j').textContent): 0;
  71. let n2=li2.querySelector('.inner .rateInfo .tip_j')? ParseVote(li2.querySelector('.inner .rateInfo .tip_j').textContent): 0;
  72. return (n1-n2)*sortstyle1;});
  73. for(let i=0; i<arr.length; i++) $('#browserItemList').append(arr[i]);
  74. }
  75.  
  76. function SortByPoint() {
  77. let itemsList = document.querySelectorAll('#browserItemList li.item');
  78. sortstyle2 = (sortstyle2==-1)? 1 :-1;
  79. showBtn2.textContent = (showBtn2.textContent=='评分排序↓') ? '评分排序↑':'评分排序↓';
  80. let arr=[];
  81. for(let i=0;i<itemsList.length;i++) arr[i]=itemsList[i];
  82. arr.sort(function(li1,li2){
  83. let n1=li1.querySelector('.inner .fade')? parseFloat(li1.querySelector('.inner .fade').innerHTML): 0;
  84. let n2=li2.querySelector('.inner .fade')? parseFloat(li2.querySelector('.inner .fade').innerHTML): 0;
  85. if(n1==n2){
  86. let n11=li1.querySelector('.inner .rank')? ParseRank(li1.querySelector('.inner .rank').textContent): 9999;
  87. let n22=li2.querySelector('.inner .rank')? ParseRank(li2.querySelector('.inner .rank').textContent): 9999;
  88. return (n22-n11)*sortstyle2;
  89. }
  90. else return (n1-n2)*sortstyle2;
  91. });
  92. for(let i=0; i<arr.length; i++) $('#browserItemList').append(arr[i]);
  93. }
  94. function SortByTime() {
  95. $(timeRange).show();$(timeRange1).show();
  96. let itemsList = document.querySelectorAll('#browserItemList li.item');
  97. sortstyle3 = (sortstyle3==-1)? 1 :-1;
  98. showBtn3.textContent = (showBtn3.textContent=='时间排序↓') ? '时间排序↑':'时间排序↓';
  99. let container = document.querySelector('ul#browserItemList');
  100. let arr=[];
  101. for(let i=0;i<itemsList.length;i++) arr[i]=itemsList[i];
  102. arr.sort(function(li1,li2){
  103. let n1=li1.querySelector('.inner .info')? ParseDate(li1.querySelector('.inner .info').textContent): 0;
  104. let n2=li2.querySelector('.inner .info')? ParseDate(li2.querySelector('.inner .info').textContent): 0;
  105. return (n1-n2)*sortstyle3;
  106. });
  107. for(let i=0; i<arr.length; i++) $('#browserItemList').append(arr[i]);
  108. }
  109. function Select(){
  110. let itemsList = document.querySelectorAll('#browserItemList li.item');
  111. itemsList.forEach( (elem, index) => {
  112. $(elem).show();
  113. let time = elem.querySelector('.inner .info')? ParseDate(elem.querySelector('.inner .info').textContent): 0;
  114. let mintime = timeRange.value !="" ? ParseDate(timeRange.value):ParseDate("1000-1-1");
  115. let maxtime = timeRange1.value !="" ? ParseDate(timeRange1.value):ParseDate("3000-1-1");
  116. let vote = elem.querySelector('.inner .rateInfo .tip_j')? ParseVote(elem.querySelector('.inner .rateInfo .tip_j').textContent): 0;
  117. let minvote = voteRange.value !="" ? parseInt(voteRange.value):0;
  118. let maxvote = voteRange1.value !="" ? parseInt(voteRange1.value):20000;
  119. if(time>mintime || time<maxtime || vote<minvote || vote>maxvote)
  120. $(elem).hide();
  121. });
  122. }
  123.  
  124. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址