选型工具

厂商对比

选择 2–4 家厂商横向对照评分与特点,辅助选型决策

厂商对比

选择 2-4 家厂商进行横向对比,帮您做出最佳选型决策

继续探索

'; // 打开弹窗打印 var win = window.open("", "_blank", "width=900,height=700"); win.document.write(html); win.document.close(); setTimeout(function(){ win.focus(); win.print(); }, 300); } function renderSummaries(label, cells){ var rows = []; for (var i=0; i' + escapeHTML(cells[i]) + ' 详情'); } return rows.join(""); } function extractRowCells(label){ var rows = resultEl.querySelectorAll("tbody tr"); var out = []; for (var i=0; i= 2 && cells[0].textContent.trim() === label){ for (var j=1; j items[bestIdx].rating) bestIdx = i; } var best = items[bestIdx]; var isTie = items.length > 1 && items[bestIdx].rating === 0; var badgeHTML = '
' + ' ' + '推荐:' + escapeHTML(best.name) + ' ' + (isTie ? '(综合评分相同,综合表现最佳)' : '综合评分 ' + best.rating.toFixed(1) + ' ★') + '
'; return badgeHTML; } // ---------- 工具 ---------- function escapeHTML(s){ var d = document.createElement("div"); d.textContent = String(s); return d.innerHTML; } // ---------- MutationObserver:表格渲染后注入 ---------- var injected = false; function inject(){ var table = resultEl.querySelector(".compare-table"); if (!table) { // 表格消失(重新对比中),重置注入状态 injected = false; return; } if (injected) return; // 导出按钮(表格上方) var btn = document.createElement("div"); btn.style.cssText = "margin-bottom:1rem;text-align:center;"; btn.innerHTML = ''; // 将全局函数暴露给 onclick window.exportCompareReport = exportReport; // 推荐徽章(表格下方) var badge = document.createElement("div"); badge.id = "recommendation-badge"; badge.innerHTML = renderRecommendationBadge(); // 清除旧的(重新对比时) var oldBtn = resultEl.querySelector(".export-report-btn"); var oldBadge = resultEl.querySelector("#recommendation-badge"); if (oldBtn) oldBtn.remove(); if (oldBadge) oldBadge.remove(); btn.classList.add("export-report-btn"); // 插入到表格上方 / 徽章插入到表格下方 var wrap = table.parentElement; // .compare-table-wrap wrap.parentNode.insertBefore(btn, wrap); wrap.parentNode.insertBefore(badge, wrap.nextSibling); injected = true; } var observer = new MutationObserver(inject); observer.observe(resultEl, {childList:true, subtree:true}); inject(); })();