2012-09-15 24 views
6

Saltos de línea y retornos de carro ... Debe ser la parte más complicada de la codificación. (Para mí)Cómo conservar un salto de línea

tiene este código en una página (que proviene de la base de datos almacenada como This from Ricardo\nAnd also a test\nRent 3000.00):

<td title="This from Ricard 
And also a test 
Rent 3000.00" style="width:198px;text-align:left">....</td> 

los utilizan para obtener el atributo título con 'oculto' \ de n

var v = $('#'+i).parent().attr('title');  // i = id of <span> child of <td> 

en el camino, los saltos de línea se pierden y el uso de la variable v en un cuadro de entrada de texto:

This from RicardAnd also a testRent 3000.00 

¿Qué se necesita para conservar el \n's y tener este aspecto en lugar de la siguiente?

Screenshot of desired result (with \n's present) after clicking edit

+1

¿Su línea de entrada de texto es multilínea o una línea? ¿Desea \ n estar escrito o simplemente estar allí como descansos? – nooitaf

+3

tiene que analizar la cadena para '\ n' y luego escapar de su \' \\ 'con' \\\ '.. –

+0

@ FrançoisWahl: de ahí es de donde lo sacó. luego dice 'se pierden los descansos y usa la variable v en un cuadro de entrada de texto'. Supongo que está estableciendo el valor de la entrada de texto al valor 'v' que obtuvo del título td. – nooitaf

Respuesta

13

Los saltos de línea todavía están allí, es solo que el navegador intenta renderizarlos.

Si todavía quiere ver el "\ n" intente esto:

var v = $('td:first-of-type').attr('title').replace(/\n/g, "\\n"); 

De lo contrario, si lo que quiere es no ver el "\ n" y en lugar de ver los saltos de línea, que podría hacer de esta manera:

var v = $('td:first-of-type').attr('title').replace(/\n/g, "<br/>"); 

Marque esta JSBin

+0

El primer fragmento de código tiene el efecto deseado. En el cuadro de entrada (texto), muestra 'This from Ricard \ nY también una prueba \ nRent 3000.00'. Perfecto. Gracias. – David

+0

Recuerde siempre aceptar la respuesta más útil. – Kryz

+0

Gracias por el recordatorio. :) – David

1

Bueno, si se pone la cadena en un cuadro de entrada de texto , no habrá nuevas líneas desde el cuadro de entrada de texto es para sola línea de texto solamente.

El \n están allí - se puede tratar la división por ellos:

lines = str.split("\n") 
+0

Esto es interesante. v parece 'Esto de Richard, Y también una prueba, Alquiler 3000.00'. ¿Alguna idea de por qué? – David

+0

¡Lo has clavado!Guau, pasé 30 minutos en ese '' split que falla ... –

0

Esta pregunta me hizo curioso, así que tuve que comprobar la fuente: http://www.w3.org/TR/html401/struct/global.html#adef-title

El W3C está completamente en silencio sobre cómo se trata de varias formas de espacio en blanco dentro de un atributo, por lo que me veo obligado a suponer que sigue las mismas reglas que HTML.

En HTML, a menos que sea bajo un elemento <PRE> o regla similar CSS, todo el espacio en blanco se contrae en un único espacio para la representación.

Por lo tanto:

<p>The quick brown 
fox 
jumped 



over the 
lazy dog</p> 

se representa el mismo que:

<p>The quick brown fox jumped over the lazy dog</p> 

Este comportamiento HTML, combinado con hecho de que los agentes de usuario (navegadores) pueden hacer que el atributo TITLE de cualquier manera que deseen, hace probable que la mayoría (si no todos) de tales agentes no tengan ninguna razón para conservar los marcadores de fin de línea (carriage return y newline o \r\n).

Editar:

Si el formato es importante, el texto podría ser title escapó y puso dentro de un elemento data-*. Con un mouse-over, un cuadro emergente personalizado podría mostrar el formato de HTML en su lugar.

Edición 2 - Tomado de su pregunta original:

<td data-title="This from Ricard<br><br>And also a test<br>Rent 3000.00" 
style="width:198px;text-align:left"> 
.... 
</td> 

Puede leer más sobre data-* atributos aquí: http://www.javascriptkit.com/dhtmltutors/customattributes.shtml

En resumen, en algún código mouseover, se puede encontrar el texto con:

var mytitle = <element>.getAttribute("data-title"); 

luego usar un div emergente para mostrar myTitle

+1

Conservan los marcadores de fin de línea, simplemente no los renderizan. Esto permite a los desarrolladores web aplicar sangría a su código sin modificar la apariencia visual del documento. – Kryz

+0

Sí, la redacción podría haber sido un poco mejor. Gracias. –

+0

El texto en cuestión va a un valor de entrada = etiqueta "". ¿Es esto lo mismo que el texto HTML? Intenté la sugerencia de Ashirvad, pero eso no funcionó. – David

0

que tendría que leer esto de la base de datos directamente. Las terminaciones de línea se interpretan cuando se genera HTML para el sitio y es por eso que se ve el elemento td multilínea en el código.

Cuando va a referenciar ese elemento td, escupe el valor en una sola línea. Una vez que se pierden estos datos, no puede volver a crearlos de ninguna manera.

+1

No creo que los datos (\ n) se pierdan. – David

+0

Ciertamente se ve de esa manera, ¡gracias por avisarme! Esto definitivamente cambia mi modelo mental de la forma en que se procesa HTML. –

2

puede usar los métodos globales de JavaScript escape() para codificar su cadena vy unescape() para decodificarla de nuevo para su uso.

aquí es tener problemas your5

http://jsfiddle.net/jYNKG/

en el código de esta línea puede ser así

var v = escape($('#'+i).parent().attr('title')); 
+0

Has intentado esto, pero no ha hecho que el valor de entrada tenga \ n – David

+0

¿puedes proporcionar un jsfiddle? – Ashirvad

+0

¿Puedo enmendar el tuyo? – David