Target Cart Summary

Summarize Target Cart

  1. // ==UserScript==
  2. // @name Target Cart Summary
  3. // @namespace Violentmonkey Scripts
  4. // @match https://www.target.com/cart
  5. // @grant none
  6. // @version 1.0
  7. // @author nikhilweee
  8. // @description Summarize Target Cart
  9. // ==/UserScript==
  10.  
  11. function allElementsLoaded() {
  12. const detailsCards = document.querySelectorAll('[data-test="cartItem"]');
  13. return detailsCards.length > 0;
  14. }
  15.  
  16. function runScriptWhenReady() {
  17. if (allElementsLoaded()) {
  18. const detailsCards = document.querySelectorAll('[data-test="cartItem"]');
  19. const table = document.createElement("table");
  20. table.style = "width: 100%; text-align: left;";
  21. table.innerHTML = "<th>Price</th><th>Item</th>";
  22.  
  23. detailsCards.forEach((card) => {
  24. const itemName =
  25. card
  26. .querySelector('[data-test="cartItem-title"]')
  27. ?.textContent.trim() || "";
  28. const quantity = card.querySelector("select")?.value || "1";
  29. const itemPrice =
  30. card
  31. .querySelector('[data-test="cartItem-price"]')
  32. ?.textContent.trim() || "";
  33. let unitPrice =
  34. card
  35. .querySelector('[data-test="cartItem-unitPrice"]')
  36. ?.textContent.trim() || "";
  37. unitPrice = unitPrice.replace("each ", "") || itemPrice;
  38. const [itemNameShort, _] = itemName.split(" - ");
  39. const row = table.insertRow();
  40. row.innerHTML = `<td>${itemPrice}</td><td>(${quantity}) ${itemNameShort}</td>`;
  41. });
  42.  
  43. const invoiceMetaElement = document.querySelector(
  44. '[data-test="cart-item-groups"]'
  45. );
  46. console.log(table);
  47. invoiceMetaElement.insertBefore(table, invoiceMetaElement.firstChild);
  48. } else {
  49. setTimeout(runScriptWhenReady, 100);
  50. }
  51. }
  52.  
  53. window.addEventListener("load", runScriptWhenReady);

QingJ © 2025

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