jkluio668
2/13/2018 - 1:16 AM

知乎回答按赞同数排序_self

// ==UserScript==
// @name         知乎回答按赞同数排序_self
// @namespace    zhihu.com
// @version      0.2.1
// @description  four score and seven years ago...
// @author       self
// @match        https://www.zhihu.com/question/*
// @grant        none
// ==/UserScript==

(function () {
  'use strict';

  // bindMyEvent()
  // window.addEventListener('popstate', bindMyEvent)

  var binded = false;
  var loop = setInterval(bindMyEvent, 1000);

  function bindMyEvent() {
    if (binded) {
      clearInterval(loop);
      return
    }
    var e = document.querySelectorAll('div.List-headerOptions div.Popover')[0];
    if (e === undefined) { return }
    binded = true;
    e.addEventListener('click', function () {
      setTimeout(function () {
        var sorts = document.querySelector('div.Select-list.Answers-select');
        var butt = document.createElement('button');
        butt.className = 'Select-option';
        butt.innerText = '按赞同排序';
        butt.addEventListener('click', sortByLikes);
        sorts.appendChild(butt);

        function sortByLikes() {
          var answers = document.querySelectorAll('div.List-item');
          if (answers.length === 0) {
            return;
          }
          var parent = answers[0].parentElement;
          var likes = [];
          for (var i = 0; i < answers.length; i++) {
            var temp = answers[i].getElementsByClassName('Voters')[0];
            var n = temp ? temp.innerText : '0';
            n = parseInt(n.split(' ')[0].replace(',',''));
            likes.push([n, i]);
          }
          likes = likes.sort(ascendByFirst)
          for (i = 0; i < likes.length; i++) {
            // parent.appendChild(answers[likes[i][1]]) //这种方法有问题,因有一个最后的<div>,被改变位置,会在每次排序后,新加载内容
            parent.insertBefore(answers[likes[i][1]],parent.childNodes[0]);
          }
        }

        function descendByFirst(x, y) {
          return y[0] - x[0];
        }
        function ascendByFirst(x, y) {
          return x[0] - y[0];
        }
      }, 0)
    })
  }
})()