JavaScript如何获取Shopify货币选择器带active类列表项的嵌套文本
问题原因
你原来的代码存在两个核心错误:
document.querySelectorAll()返回的是匹配所有条件的节点集合(NodeList),不是单个DOM元素,直接取.innerHTML自然返回undefined- 选择器语法错误:逗号分隔的选择器逻辑是「匹配li 或 类为currency-selector的元素 或 类为active的元素 或 href以#开头的a标签」,完全没有命中你要的「currency-selector列表下带active类的li里面的a标签」这个目标元素
修复后代码
基础版本(仅初始加载显示选中货币)
<script> // 等待DOM完全加载后再执行 document.addEventListener('DOMContentLoaded', function() { // 精准选中带active类的货币项内部的a标签 const activeCurrencyEl = document.querySelector('.currency-selector li.active a'); if (activeCurrencyEl) { // 去除文本前后的多余空白 const currencyText = activeCurrencyEl.textContent.trim(); document.getElementById('currName').textContent = currencyText; } }); </script>
完整版本(支持切换货币后自动更新显示)
如果需要用户切换货币后同步更新显示,添加事件监听即可:
<script> function updateCurrencyDisplay() { const activeCurrencyEl = document.querySelector('.currency-selector li.active a'); if (activeCurrencyEl) { const currencyText = activeCurrencyEl.textContent.trim(); document.getElementById('currName').textContent = currencyText; } } // 初始加载时执行 document.addEventListener('DOMContentLoaded', updateCurrencyDisplay); // 监听货币选择点击事件,切换后更新 document.querySelectorAll('.currency-selector li a').forEach(item => { item.addEventListener('click', function() { // 等待Shopify自带的active类切换逻辑执行完成后再更新显示 setTimeout(updateCurrencyDisplay, 100); }); }); </script>
补充说明
- 优先用
textContent而非innerHTML,避免XSS风险,也不需要解析多余的HTML标签 - 选择器精准定位到目标元素,避免匹配到无关DOM节点
- 加DOMContentLoaded监听确保DOM渲染完成后再执行代码,避免元素未加载导致的取值失败
内容的提问来源于stack exchange,提问作者LLKC.
相关产品推荐
相关产品推荐

