2011-06-25 12 views
9

Me pregunto si hay una forma de localizar números en una página con jQuery o Javascript simple.Seleccionar números en una página con jQuery o Javascript

Esto es lo que quiero hacer:

Say "23 de junio" se encuentra en la página. Lo que quiero hacer es preceder y anexar algunos selectores <span> al número.

El uso de :contains() con jQuery selecciona todo, no solo el número.

Estas cadenas están siendo generadas sin ningún elemento de envoltura por un tema de Wordpress en el que estoy trabajando, y yo solo quiero seleccionar el número.

¡Cualquier ayuda sería apreciada! Gracias por incluso pensarlo.
-George

+1

¿Conoces el elemento exacto en el que se encuentra tu cita? ¿Podrías hacer un poco de regexing y encontrar una cita? – Marnix

+1

+1 para la pregunta interesante – leon

Respuesta

9

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.

+3

+1 para la respuesta correcta. – thirtydot

0

Depende completamente del formato de su fecha.

Encontré este sitio web con muchas expresiones regulares diferentes (porque solo está buscando un texto normal para una fecha).

Esto parece una buena opción si este es el formato de la fecha (dd MMM aaaa): http://regexlib.com/REDetails.aspx?regexp_id=405

supongo, porque es una plantilla, que sus fechas serán los mismos para todas las páginas. Entonces el formato será el mismo también. Puede usar la expresión regular en cada fragmento de texto en su plantilla si la define bien.

+0

Gracias por la entrada, pero no está formateado las fechas que estoy buscando.Solo números, no necesariamente en ningún formato – ggwicz

+0

** Gracias a todos ** La solución de @Patrick DW funciona muy bien. Gracias hombre! – ggwicz

1

Solo pensando en voz alta, pero ¿cree que esto funcionaría?

document.body.innerHTML = document.body.innerHTML.replace(/(\d+)/g, "<span class='number'>$1</span>") 
+0

[0-9] + = \ d +, ¿verdad? – leon

+0

@andreas Parece que tomaría los números, pero solo quiero anteponer y anexar el 'lapso '. ¿Reemplazaría $ 1 el número? (Soy un novato de JavaScript) – ggwicz

+0

@leon, sí, por supuesto. editado mi respuesta. –

Cuestiones relacionadas