Quiero hacer varios reemplazos en la misma cadena. Tengo esto:
ignoredids = [{"ignoredid":"3329"},{"ignoredid":"25895"}]; userlist = `<div id="u343">something</div><div id="u3143">something</div><div id="u25895">something</div><div id="u5343">something</div><div id="u3329">something</div>`;después de los reemplazos debería verse así:
<div id="u343">something</div><div id="u3143">something</div><div id="u25895">ignore this</div><div id="u5343">something</div><div id="u3329">ignore this</div>Así que probé:
for (let { ignoredid } of ignoredids) { mylist = userlist.replace(`<div id="u${ignoredid}">something</div>`,`<div id="u${ignoredid}">ignore this</div>`); }pero no parece hacer nada. ¿Qué está mal?
De la forma en que lo escribió ahora, solo reemplazará en la última identificación y la asignará a la variable mylist , porque .replace no muta la cadena.
Si userlist a la lista de usuarios en lugar de a mylist , funcionará de la manera que usted quiere que funcione, porque en realidad estamos modificando la cadena en cada iteración:
ignoredids = [{"ignoredid": "3329"}, {"ignoredid": "25895"}]; userlist = `<div id="u343">something</div><div id="u3143">something</div><div id="u25895">something</div><div id="u5343">something</div><div id="u3329">something</div>`; for (let { ignoredid} of ignoredids) { userlist = userlist.replace(`<div id="u${ignoredid}">something</div>`, `<div id="u${ignoredid}">ignore this</div>`); } document.getElementById("myDiv").innerHTML = userlist; <div id="myDiv"></div>replace() con cosas codificadas. // Helper function const arrHas = (arr, val) => arr.some(a => val === a); // Your stuff: const replacer = "IGNORE THIS"; const ignoredids = [ {"ignoredid":"3329"}, {"ignoredid":"25895"}, ]; const userlist = `<div id="u343">Lorem ipsum</div> <div id="u3143">Dolor sit amet</div> <div id="u25895">consectetur adipisicing</div> <div id="u5343">Elit enim </div> <div id="u3329">Nemo eveniet</div>`; // Create an Array of "u" prefixed IDs const uIDs = ignoredids.map(o => `u${o.ignoredid}`); // Use DOMParser!! const DOC = new DOMParser().parseFromString(userlist, "text/html"); [...DOC.body.children].forEach(EL => { if (arrHas(uIDs, EL.id)) EL.textContent = replacer; }); const result = DOC.body.innerHTML; console.log(result) el result es ahora esta cadena similar a HTML:
<div id="u343">Lorem ipsum</div> <div id="u3143">Dolor sit amet</div> <div id="u25895">IGNORE THIS</div> <div id="u5343">Elit enim </div> <div id="u3329">IGNORE THIS</div>