jd.com HDD per TB price

show per TB price on jd.com!

// ==UserScript==
// @name         jd.com HDD per TB price
// @namespace    http://exz.me/
// @version      0.2
// @description  show per TB price on jd.com!
// @author       Epix
// @match        https://item.jd.com/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';
    if (document.querySelector('div.itemInfo-wrap > div.sku-name').innerText.indexOf('硬盘')!==-1 || document.querySelector('#crumb-wrap > div > div.crumb.fl.clearfix > div:nth-child(5) > a').innerText.indexOf('硬盘')!==-1){
        var capRegex=/(\d+)T/;
        var priceBaseUrl='https://p.3.cn/prices/mgets?type=1&skuIds=J_';
        var itemEls1=Array.from(document.querySelectorAll('#choose-attr-2 > div.dd > div.item'));
        var itemEls2=Array.from(document.querySelectorAll('#choose-attr-3 > div.dd > div.item'));
        var itemEls=[].concat(itemEls1,itemEls2);
        var skus=itemEls.map(itemEl=>'J_'+itemEl.getAttribute('data-sku'));
        console.log(skus);
        var priceUrl=priceBaseUrl+skus.join(',');
        GM_xmlhttpRequest({
            method:'GET',
            url:priceUrl,
            fetch:true,
            onload:response=>{
                var pricesList=JSON.parse(response.responseText);
                var prices=new Map();
                for (var price of pricesList) {
                    prices.set(price.id,price.p);
                }
                itemEls.forEach(itemEl=>{
                    var itemEla=itemEl.querySelector('a');
                    var itemSku=itemEl.getAttribute('data-sku');
                    var match=capRegex.exec(itemEla.innerText);
                    if (match){
                        var cap=match[1];
                        var perT=prices.get('J_'+itemSku)/parseInt(cap);
                        itemEla.text+=`(¥${perT.toFixed(2)}/TB)`;
                    }
                });
            }
        });
    }
})();