2011-09-11 16 views
7

que tienen un elemento de ejemplo así:conseguir la primera línea de texto en un jQuery elemento

<div id="element"> 
    Blah blah blah. 
    <div>Header</div> 
    ... 
</div> 

también puede tener este aspecto:

<div id="element"> 
    <span>Blah blah blah.</span> 
    <h4>Header</h4> 
    ... 
</div> 

Quiero conseguir la primera línea (definiendo la línea libremente) (Blah blah blah.) de texto dentro del elemento. Puede estar envuelto dentro de un elemento secundario o simplemente estar desnudo textnode. ¿Cómo puedo hacer eso? Gracias.

Respuesta

14

Utilice el método contents()[docs] para obtener todos los niños, incluidos los nodos de texto, filtrar cualquier nodos vacío (sólo o espacios en blanco), y luego agarre la primera de la serie.

var first_line = $("#element") 
         .contents() 
         .filter(function() { 
          return !!$.trim(this.innerHTML || this.data); 
         }) 
         .first(); 

nodo de texto:http://jsfiddle.net/Yftnh/

elemento:http://jsfiddle.net/Yftnh/1/

+0

gracias, aunque para mí esto devuelve un objeto en lugar de texto, ¿debería simplemente first_line [0]? – Harry

+0

Sí, esto le da un objeto jQuery con el elemento o el nodo de texto. Si desea el contenido de texto, use 'first_line.text()'. Si desea recortar el espacio en blanco inicial y final, haga '$ .trim (first_line.text())'. – user113716

+1

Hola, ¿puedes explicar por qué regresas? Que es !!? – Harry

-1

primero obtener el contenido del elemento

var content = $('#element').html(); 

luego dividir el texto en una matriz mediante salto de línea

tmp = content.split("\n"); 

la primera parte de la matriz es la primera línea del elemento

var firstLine = tmp[0]; 
+1

pensé por primera vez, lo salto de línea, pero no veo en Fx, al menos, no lo es. Sin embargo, es peligroso confiar. Aquí está la primera línea: 'alert ($ (" # element "). Text(). Split (/ \ n /) [1])' the [0] th es una cadena vacía ... http: // jsfiddle .net/mplungjan/QquSp/ – mplungjan

+0

no hay salto de línea – Harry

2

Aquí está la idea para usted. Por supuesto, si no hay elemento h4 antes de la línea que desea obtener:

var content = $('#element').html(); 
var arr = content.split('<h4>'); 
console.log(arr[0]); 
+0

no h4 garantizado, es solo un ejemplo – Harry

2
var myElement = $("#element"); 
while(myElement.children().length > 0) 
{ 
    myElement = myElement.children().first(); 
} 
var firstText = myElement.text(); 

Suponiendo que el texto se ajusta correctamente dentro de un elemento, por supuesto. Es posible comprobar si hay texto antes del primer elemento:

/\s*</.test(myElement.html()) 
+0

No funciona para el primer caso, creo que coincidirá con el encabezado en lugar del blah blah blah (tal vez debería haber elegido mejor texto de ejemplo lol) – Harry

+0

Si obtienes

mytext
se vuelve bastante difícil. Necesitas algo recursivamente viajando a través del DOM, supongo. ¿Cuán a prueba de balas tiene que ser? –

Cuestiones relacionadas