知乎热榜显示关注与浏览量(A560)

在知乎的热榜页中,显示每个问题的关注量与浏览量。

目前為 2023-03-08 提交的版本,檢視 最新版本

// ==UserScript==
// @name         知乎热榜显示关注与浏览量(A560)
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  在知乎的热榜页中,显示每个问题的关注量与浏览量。
// @author       Fat Cabbage
// @license      MIT
// @match        https://www.zhihu.com/hot
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @require      https://code.jquery.com/jquery-3.5.1.min.js
// ==/UserScript==
/* globals jQuery, $, waitForKeyElements */

(function () {
    'use strict';

    let node_list = document.getElementsByClassName('HotItem-metrics');
    let links_list = document.getElementsByClassName('HotItem-content');

    console.log(links_list);
    for (let i = 0; i < links_list.length; i++) {
        let links = links_list[i].getElementsByTagName('a')
        let href = links[0].href;

        $.get(href, res => {
            let dom = new DOMParser().parseFromString(res, 'text/html');
            let values = dom.getElementsByClassName('NumberBoard-itemValue');

            let node = node_list[i];
            let followers_num = parseInt(values[0].outerText.replaceAll(',', ''));
            let views_num = parseInt(values[1].outerText.replaceAll(',', ''));

            update_interface_value(node, followers_num, views_num);
        });
    }
})();

/**
 *
 * @param node The class of this node contains 'HotItem-metrics'.
 * @param followers_num
 * @param views_num
 */
function update_interface_value(node, followers_num, views_num) {
    node = node.childNodes;

    let view_str;
    if (views_num < 1e4) {
        view_str = `${views_num} `;
    } else if (views_num < 1e8) {
        view_str = `${Math.floor(views_num / 1e4)} 万`;
    } else {
        view_str = `${(views_num / 1e8).toFixed(1)} 亿`;
    }

    let old_value = node[1].nodeValue;
    let new_value = `${old_value} - ${followers_num} 关注 - ${view_str}浏览`
    let text_node = document.createTextNode(new_value);

    node[1].remove();
    node[0].parentNode.insertBefore(text_node, node[1])
}

function HTML2DOM(html) {
    console.assert(typeof html == 'string')
    let dom = document.createElement('div');
    dom.innerHTML = html;
    return dom.childNodes;
}

QingJ © 2025

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