2010-06-22 14 views
10

¿Cuál sería la mejor manera de escanear todo el DOM, encontrar cualquier elemento que tenga texto y envolverlo en una clase de tramo? Gracias Jquery encuentra todos los elementos con texto

+0

creo que es necesario especificar qué te refieres con 'cualquier elemento que tenga texto'. ¿Te refieres a elementos que contienen texto que no sea en blanco, pero no en elementos infantiles? –

Respuesta

14

Envolver todos los nodos de texto que contienen algo más que sólo los espacios en blanco:

$('body *').contents().filter(function() { 
    return (this.nodeType == 3) && this.nodeValue.match(/\S/); 
}).wrap("<span />") 

Para envolver todos los nodos de texto, incluyendo las que contienen sólo espacio en blanco:

$('body *').contents().filter(function() { 
    return (this.nodeType == 3) && this.nodeValue.length > 0; 
}).wrap("<span />") 
+0

Vea este código en acción en: http://jsbin.com/oquhu3/3 (el * con * espacio en blanco) –

+0

¡Gracias, funciona! He intentado agregar una clase pero no funcionó. $ (function() { $ ('body *'). Contents(). Filter (function() { return (this.nodeType == 3) && this.nodeValue.length> 0; }). AddClass ("someclass"); }); ¿Alguna idea de por qué? Gracias otra vez. – Mircea

+0

No puede agregar una clase a un nodo de texto. Intente envolverlo con un lapso que tenga una clase: $ ('cuerpo *'). Contenido(). Filtro (función() { return (this.nodeType == 3) && this.nodeValue.length> 0; }) .wrap ("") –

1

Usted puede utilizar .Cada para iterar sobre todos los elememnts:

$('*').each(function(){ 
    if($(this).text()) 
    { 
     $(this).wrapInner('<span />'); 
    } 
}) 

no he probado que la pieza de código, pero es bastante simple. Todo lo que necesita saber es . Cada, wrapInner y * selector. jQuery docs es muy útil aquí.

+0

Parece que queda algo más de trabajo: http://jsbin.com/oquhu3 –

+1

intente agregar $ (documento) .ready(); a su código: $ (documento) .ready (función() { $ ('*'). cada uno (función {} ( if ($ (this) .text()) { $ (this) .wrapInner (''); } )) }) – dzida

+2

Creo que esto agregará clase a todos los elementos HTML independientemente de si tienen o no texto real. – Mircea

Cuestiones relacionadas