¿Hay alguna forma de reemplazar el texto normal dentro de un elemento de tabla que se coloca dentro del cuerpo del HTML?
¿Te gusta reemplazar "hola" por "hola"?
Utilice únicamente JavaScript sin jQuery .
¿Hay alguna forma de reemplazar el texto normal dentro de un elemento de tabla que se coloca dentro del cuerpo del HTML?
¿Te gusta reemplazar "hola" por "hola"?
Utilice únicamente JavaScript sin jQuery .
hello, this is a text randomTexthellodebería ser hi, this is a text randomTexthello. Sin embargo, todas las demás respuestas aquí reemplazan los caracteres en lugar de las palabras.
Respuestas:
Para reemplazar una cadena en su HTML con otra, use el método de reemplazo en innerHTML :
document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');
Tenga en cuenta que esto reemplazará la primera instancia de en hellotodo el cuerpo, incluidas las instancias en su código HTML (por ejemplo, nombres de clases, etc.), así que úselo con precaución; para obtener mejores resultados, intente restringir el alcance de su reemplazo al apuntar a su código usando document.getElementById o similar.
Para reemplazar todas las instancias de la cadena de destino, use una expresión regular simple con la gbandera lobal:
document.body.innerHTML = document.body.innerHTML.replace(/hello/g, 'hi');
<script type="text/javascript"> window.onload = clear(); function clear() { document.body.innerHTML = document.body.replace('ü', 'n'); } </script>
window.onload = clear;sin los paréntesis "()". Cuando escribe clear(), en realidad ejecuta la función, pero solo desea asignar la función al controlador de carga
La función a continuación funciona perfectamente para mí:
// Note this *is* JQuery, see below for JS solution instead
function replaceText(selector, text, newText, flags) {
var matcher = new RegExp(text, flags);
$(selector).each(function () {
var $this = $(this);
if (!$this.children().length)
$this.text($this.text().replace(matcher, newText));
});
}
Aquí tienes un ejemplo de uso:
function replaceAllText() {
replaceText('*', 'hello', 'hi', 'g');
}
$(document).ready(replaceAllText);
$('html').ajaxStop(replaceAllText);
También puede usar hacer un reemplazo directo como este:
document.body.innerHTML = document.body.innerHTML.replace('hello', 'hi');
Pero tenga cuidado con esto ya que puede afectar las etiquetas, CSS y scripts también.
EDITAR: En cuanto a una solución de JavaScript pura, use este método en su lugar:
function replaceText(selector, text, newText, flags) {
var matcher = new RegExp(text, flags);
var elems = document.querySelectorAll(selector), i;
for (i = 0; i < elems.length; i++)
if (!elems[i].childNodes.length)
elems[i].innerHTML = elems[i].innerHTML.replace(matcher, newText);
}
Terminé con esta función para reemplazar de forma segura el texto sin efectos secundarios (hasta ahora):
function replaceInText(element, pattern, replacement) {
for (let node of element.childNodes) {
switch (node.nodeType) {
case Node.ELEMENT_NODE:
replaceInText(node, pattern, replacement);
break;
case Node.TEXT_NODE:
node.textContent = node.textContent.replace(pattern, replacement);
break;
case Node.DOCUMENT_NODE:
replaceInText(node, pattern, replacement);
}
}
}
Es para casos en los que los 16kB findAndReplaceDOMTextson demasiado pesados.
Yo tuve el mismo problema. Escribí mi propia función usando reemplazar en innerHTML, pero estropearía los enlaces de anclaje y demás.
Para que funcione correctamente, utilicé una biblioteca para hacer esto.
La biblioteca tiene una API impresionante. Después de incluir el script lo llamé así:
findAndReplaceDOMText(document.body, {
find: 'texttofind',
replace: 'texttoreplace'
}
);
Estaba tratando de reemplazar una cadena realmente grande y, por alguna razón, las expresiones regulares arrojaban algunos errores / excepciones.
Entonces encontré esta alternativa a las expresiones regulares que también se ejecuta bastante rápido. Al menos fue lo suficientemente rápido para mí:
var search = "search string";
var replacement = "replacement string";
document.body.innerHTML = document.body.innerHTML.split(search).join(replacement)
src: ¿Cómo reemplazar todas las apariciones de una cadena en JavaScript?
Utilice la función de reemplazo de cadena de JavaScript predeterminada
var curInnerHTML = document.body.innerHTML;
curInnerHTML = curInnerHTML.replace("hello", "hi");
document.body.innerHTML = curInnerHTML;
Intente aplicar la solución sugerida anteriormente en documentos bastante grandes, reemplazando cadenas bastante cortas que pueden estar presentes en innerHTML o incluso innerText, y su diseño html se rompe en el mejor de los casos
Por lo tanto, primero recojo solo elementos de nodo de texto a través de nodos DOM HTML, como este
function textNodesUnder(node){
var all = [];
for (node=node.firstChild;node;node=node.nextSibling){
if (node.nodeType==3) all.push(node);
else all = all.concat(textNodesUnder(node));
}
return all;
}
textNodes=textNodesUnder(document.body)
for (i in textNodes) { textNodes[i].nodeValue = textNodes[i].nodeValue.replace(/hello/g, 'hi');
`y luego apliqué el reemplazo en todos ellos en ciclo
Quería agregar un ejemplo a la respuesta de funky-future ya que seguía recibiendo este error:
Uncaught TypeError: element.childNodes is not iterable
usar así:
replaceInText(document.body,"search term","replacement");
no funcionó para mí con los selectores de jQuery.
Soy nuevo Javascripty acabo de comenzar a aprender estas habilidades. Compruebe si el método siguiente es útil para reemplazar el texto.
<script>
var txt=document.getElementById("demo").innerHTML;
var pos = txt.replace(/Hello/g, "hi")
document.getElementById("demo").innerHTML = pos;
</script>
A veces, el cambio document.body.innerHTMLrompe algunos scripts JS en la página. Aquí está la versión, que solo cambia el contenido de los textelementos:
function replace(element, from, to) {
if (element.childNodes.length) {
element.childNodes.forEach(child => replace(child, from, to));
} else {
const cont = element.textContent;
if (cont) element.textContent = cont.replace(from, to);
}
};
replace(document.body, new RegExp("hello", "g"), "hi");