You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Shopify站点批量替换特定HTML元素的技术问题

嘿,我来帮你搞定这个Shopify里的批量替换问题!你现在遇到的问题是replace()只替换第一个匹配项,加上正则全局标志就能解决,而且之前的实体转义是没必要的,我给你梳理清楚:

问题根源

你用的String.replace('目标字符串', '替换内容')这种写法,默认只会替换第一个匹配到的内容。另外,你错误地用了HTML实体转义(</div>),但jQuery的html()方法返回的是原始的HTML标签字符串,不是转义后的实体,所以根本匹配不到你要替换的内容。

修复后的代码

直接用带全局标志g的正则表达式来做全局替换:

$(document).ready(function(){
  $('.product-list').html(function(index, html){
    // 正则表达式末尾的g表示全局匹配所有实例
    return html.replace(/<\/div><div class="product-list_row">/g, '<!-- removed -->');
  });
})

效果验证

运行这段代码后,你的HTML结构就会变成你预期的样子:

<div class="product-list">
  <div class="product-list_row">
    <div class="product-list_item">1</div>
    <div class="product-list_item">2</div>
    <div class="product-list_item">3</div>
    <!-- removed -->
    <div class="product-list_item">4</div>
    <div class="product-list_item">5</div>
    <div class="product-list_item">6</div>
    <!-- removed -->
    <div class="product-list_item">7</div>
    <div class="product-list_item">8</div>
    <div class="product-list_item">9</div>
  </div>
</div>

额外提示

如果你的product-list_row类名后面可能有其他属性(比如额外的class或者data属性),可以把正则改成更灵活的形式,比如:

return html.replace(/<\/div><div[^>]+class="[^"]*product-list_row[^"]*"[^>]*>/g, '<!-- removed -->');

这样即使这个div有其他属性,也能匹配到,但在你的场景里,原正则已经足够用啦。

内容的提问来源于stack exchange,提问作者JonnyPlow

火山引擎 最新活动