Encuentre el text más interno con javascript (jquery) independientemente del número de elementos nesteds y reemplácelo

Si tengo esto:

<a href="#" id="the-link"><em>any random text</em></a> 

O esto:

 <a href="#" id="the-link">any random text</a> 

O esto:

 <a href="#" id="the-link"><em><div id="foo"><span>any random text</span></div></em></a> 

Me gustaría capturar el text "cualquier text aleatorio" y luego replacelo.

¿Cómo puedo hacer esto con jQuery? Si no es con jQuery, ¿solo javascript?

4 Solutions collect form web for “Encuentre el text más interno con javascript (jquery) independientemente del número de elementos nesteds y reemplácelo”

Puedes hacer esto recursivamente. Es bastante simple:

 function replaceTextNodes(node, newText) { if (node.nodeType == 3) { // Filter out text nodes that contain only whitespace if (!/^\s*$/.test(node.data)) { node.data = newText; } } else if (node.hasChildNodes()) { for (var i = 0, len = node.childNodes.length; i < len; ++i) { replaceTextNodes(node.childNodes[i], newText); } } } replaceTextNodes(document.getElementById("the-link"), "NEW TEXT"); 
 $('a:contains(starcraft)').html('starcraft 2'); 

Editar para comentarios: jsfiddle

 $('a').find(':only-child:last').html('starcraft 2'); 

Es posible que desee verificar esta pregunta: select el niño más profundo en jQuery

Parece que necesitas encontrar el hijo más profundo y luego llamar a .html('new string') o .text('new string') en él.

 var link = $('#the-link'); var inner = link; while(inner.children().length > 0) inner = inner.children(); inner.html('whatever'); 
Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.