jQuery reemplaza todas las ocurrencias de una cadena en una página html

Estoy trabajando en un proyecto donde necesito reemplazar todas las ocurrencias de una cadena con otra cadena. Sin embargo, solo quiero reemplazar la cadena si es texto. Por ejemplo, quiero convertir esto …

Hi

Test

Hi

dentro…

 

Hello

Test

Hello

En ese ejemplo, todos los “Hola” se convirtieron en “Hola”, excepto el “Hola” como la clase h2. Yo he tratado…

 $("#container").html( $("#container").html().replace( /Hi/g, "Hello" ) ) 

… pero eso reemplaza todas las apariciones de “Hola” en el html también

Esta:

 $("#container").contents().each(function () { if (this.nodeType === 3) this.nodeValue = $.trim($(this).text()).replace(/Hi/g, "Hello") if (this.nodeType === 1) $(this).html( $(this).html().replace(/Hi/g, "Hello") ) }) 

Produce esto:

 

Hello

Test

Hello

Ejemplo jsFiddle

Buenos resultados con:

 function str_replace_all(string, str_find, str_replace){ try{ return string.replace( new RegExp(str_find, "gi"), str_replace ) ; } catch(ex){return string;}} 

y más fácil de recordar …

  replacedstr = str.replace(/needtoreplace/gi, 'replacewith'); 

needtoreplace no debe redondearse por '

aquí tienes => http://jsfiddle.net/c3w6X/1/

 var children=''; $('#container').children().each(function(){ $(this).html($(this).html().replace(/Hi/g,"Hello")); //change the text of the children children=children+$(this)[0].outerHTML; //copy the changed child }); var theText=$('#container').clone().children().remove().end().text(); //get the text outside of the child in the root of the element $('#container').html(''); //empty the container $('#container').append(children+theText.replace(/Hi/g,"Hello")); //add the changed text of the root and the changed children to the already emptied element 
 //Get all text nodes in a given container //Source: http://stackoverflow.com/a/4399718/560114 function getTextNodesIn(node, includeWhitespaceNodes) { var textNodes = [], nonWhitespaceMatcher = /\S/; function getTextNodes(node) { if (node.nodeType == 3) { if (includeWhitespaceNodes || nonWhitespaceMatcher.test(node.nodeValue)) { textNodes.push(node); } } else { for (var i = 0, len = node.childNodes.length; i < len; ++i) { getTextNodes(node.childNodes[i]); } } } getTextNodes(node); return textNodes; } var textNodes = getTextNodesIn( $("#container")[0], false ); var i = textNodes.length; var node; while (i--) { node = textNodes[i]; node.textContent = node.textContent.replace(/Hi/g, "Hello"); } 

Tenga en cuenta que esto también coincidirá con las palabras donde "Hola" es solo una parte de la palabra, por ejemplo, "Hill". Para hacer coincidir solo la palabra completa, use /\bHi\b/g