微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果在 div 中找到,则替换某些文本仅在最后一行工作

如何解决如果在 div 中找到,则替换某些文本仅在最后一行工作

 let maskElm = '#div-popUp';
 setTimeout(function() {
    $(maskElm).each(function() {
        let text = $(this).html();
        console.log(text);
        
        $(this).html(text.replace('asID','DE ID (FFF)'));
        $(this).html(text.replace('LG NAME','The Long Name'));
        $(this).html(text.replace('TYPE','S12 Type'));
        $(this).html(text.replace('TOWER424','Tower')); <-- only line that works as expected,rest ignored,why?
    });
},50);

运行上面的,只更新最后一个文本(按预期工作)。在我的 maskElm 弹出 div 中,上述所有字段都存在,甚至在我的 console.log(text); 中控制台输出 - 但前 3 个文本替换被忽略..我在这里遗漏了什么? 注意:我需要用 .html 逐行执行,因为我不想松散格式..

我真的需要另外对每个文本值添加 if 检查吗?我已经需要添加大约 20 个其他字段。最佳路线?

解决方法

你应该在 .repace 之后保存变量

let text = $(this).html();
text = text.replace('asID','DE ID (FFF)');
text = text.replace('LG NAME','The Long Name');
text = text.replace('TYPE','S12 Type');
text = text.replace('TOWER424','Tower');

然后写入元素:

$(this).html(text);
,

您可以拥有一组旧值和新值以使事情变得更容易。您可以获取元素的 HTML 内容,循环遍历这些值以替换所有值并更新 DOM:

let maskElm = "#div-popUp";
let toReplace = [
  { "asID": "DE ID (FFF)" },{ "LG NAME": "The Long Name" },{ "TYPE": "S12 Type" },{ "TOWER424": "Tower" }
];

$(maskElm).each(function () {
  let updatedHTML = $(this).html();

  toReplace.forEach((item) => {
    const [oldValue,newValue] = Object.entries(item)[0];
    updatedHTML = updatedHTML.replace(oldValue,newValue);
  });

  $(this).html(updatedHTML);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="div-popUp">Lorem ipsum dolor sit amet,consectetur adipisicing elit. Repellat aspernatur <b>TYPE</b> eligendi error in consectetur incidunt,<b>asID</b> voluptas autem dolorem deserunt <b>LG NAME</b> praesentium voluptatum eius,rerum magnam laborum id. Porro <b>TOWER424</b> nemo dolore aut.</div>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。