jd.com HDD per TB price

show per TB price on jd.com!

  1. // ==UserScript==
  2. // @name jd.com HDD per TB price
  3. // @namespace http://exz.me/
  4. // @version 0.2
  5. // @description show per TB price on jd.com!
  6. // @author Epix
  7. // @match https://item.jd.com/*
  8. // @grant GM_xmlhttpRequest
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13. 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){
  14. var capRegex=/(\d+)T/;
  15. var priceBaseUrl='https://p.3.cn/prices/mgets?type=1&skuIds=J_';
  16. var itemEls1=Array.from(document.querySelectorAll('#choose-attr-2 > div.dd > div.item'));
  17. var itemEls2=Array.from(document.querySelectorAll('#choose-attr-3 > div.dd > div.item'));
  18. var itemEls=[].concat(itemEls1,itemEls2);
  19. var skus=itemEls.map(itemEl=>'J_'+itemEl.getAttribute('data-sku'));
  20. console.log(skus);
  21. var priceUrl=priceBaseUrl+skus.join(',');
  22. GM_xmlhttpRequest({
  23. method:'GET',
  24. url:priceUrl,
  25. fetch:true,
  26. onload:response=>{
  27. var pricesList=JSON.parse(response.responseText);
  28. var prices=new Map();
  29. for (var price of pricesList) {
  30. prices.set(price.id,price.p);
  31. }
  32. itemEls.forEach(itemEl=>{
  33. var itemEla=itemEl.querySelector('a');
  34. var itemSku=itemEl.getAttribute('data-sku');
  35. var match=capRegex.exec(itemEla.innerText);
  36. if (match){
  37. var cap=match[1];
  38. var perT=prices.get('J_'+itemSku)/parseInt(cap);
  39. itemEla.text+=`(¥${perT.toFixed(2)}/TB)`;
  40. }
  41. });
  42. }
  43. });
  44. }
  45. })();