Se puede caminar a través de todos los elementos, mirando a los nodos de texto, y su sustitución por el contenido actualizado que tiene el número envueltos.
var regex = /(\d+)/,
replacement = '<span>$1</span>';
function replaceText(el) {
if (el.nodeType === 3) {
if (regex.test(el.data)) {
var temp_div = document.createElement('div');
temp_div.innerHTML = el.data.replace(regex, replacement);
var nodes = temp_div.childNodes;
while (nodes[0]) {
el.parentNode.insertBefore(nodes[0],el);
}
el.parentNode.removeChild(el);
}
} else if (el.nodeType === 1) {
for (var i = 0; i < el.childNodes.length; i++) {
replaceText(el.childNodes[i]);
}
}
}
replaceText(document.body);
Ejemplo:http://jsfiddle.net/JVsM4/
esto no hace ningún daño a los elementos existentes, y sus datos asociados jQuery.
EDIT: Usted podría acortar un poco con un poco de jQuery:
var regex = /(\d+)/g,
replacement = '<span>$1</span>';
function replaceText(i,el) {
if (el.nodeType === 3) {
if (regex.test(el.data)) {
$(el).replaceWith(el.data.replace(regex, replacement));
}
} else {
$(el).contents().each(replaceText);
}
}
$('body').each(replaceText);
Ejemplo:http://jsfiddle.net/JVsM4/1/
Tenga en cuenta que la expresión regular requiere la g
modificador global.
Probablemente un poco más lento de esta manera, por lo que si el DOM es bastante grande, usaría la versión que no es jQuery.
¿Conoces el elemento exacto en el que se encuentra tu cita? ¿Podrías hacer un poco de regexing y encontrar una cita? – Marnix
+1 para la pregunta interesante – leon