2012-09-15 8 views
6

Interruzioni di riga e ritorni a capo ... Deve essere la parte più complicata della codifica. (Per me)Come mantenere un'interruzione di riga

Avere questo codice in una pagina (che è venuto dal database memorizzato come 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> 

quindi utilizzare questo per ottenere l'attributo titolo con 'nascosto' \ di n

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

Lungo il percorso, le interruzioni di riga perdersi e utilizzando la variabile v in una casella di testo:

This from RicardAnd also a testRent 3000.00 

Cosa serve per preservare lo \n's e avere questo aspetto come invece di seguito?

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

+1

La casella di immissione testo è su più righe o su una riga? Vuoi \ n essere scritto o semplicemente essere lì come pause? – nooitaf

+3

devi analizzare la stringa per '\ n' e quindi sfuggire il tuo \' \\ 'con' \\\' .. –

+0

@ FrançoisWahl: Ecco da dove viene. poi dice "le pause si perdono e si utilizza la variabile v in una casella di testo". Presumo che stia impostando il valore dell'ingresso del testo sul valore 'v' che ha ottenuto dal titolo td. – nooitaf

risposta

13

Le interruzioni di riga sono ancora lì, è solo che il browser tenta di renderle.

Se si vuole ancora di vedere il "\ n" provare questo:

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

Altrimenti, se quello che vuoi è non vedere il "\ n" e invece vedere le interruzioni di linea, si potrebbe fare in questo modo:

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

Scegli questa JSBin

+0

Il primo snippet di codice ha appena l'effetto desiderato. Nella casella di input (testo), mostra 'This from Ricard \ nE anche un test \ nRent 3000.00'. Perfezionare. Grazie. – David

+0

Ricorda sempre di accettare la risposta più utile. – Kryz

+0

Grazie per il promemoria. :) – David

1

Beh, se si mette la stringa in una casella di immissione di testo , non ci saranno nuove linee dal momento che la casella di testo è per riga singola solo testo.

Il \n sono lì - si può provare scissione da loro:

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

Questo è interessante. v assomiglia a 'This from Richard, E anche un test, Rent 3000.00'. Qualche idea, perché? – David

+0

Lo hai inchiodato!Wow, ho speso 30 minuti in quel '' split fallito ... –

0

Questa domanda mi aveva incuriosito, così ho dovuto controllare la fonte: http://www.w3.org/TR/html401/struct/global.html#adef-title

Il W3C è completamente silenzioso su come viene trattata una diversa forma di spazio bianco all'interno di un attributo, quindi sono costretto a presumere che segua le stesse regole dell'HTML.

In HTML, a meno che non sia un elemento <PRE> o una regola simile CSS, tutto lo spazio vuoto viene compresso in un unico spazio per il rendering.

Così:

<p>The quick brown 
fox 
jumped 



over the 
lazy dog</p> 

è reso uguale a:

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

Questo comportamento HTML, unita fatto che i programmi utente (browser) possono rendere l'attributo TITLE in modo che desiderano, è probabile che la maggior parte (se non tutti) tali agenti non abbiano motivo di conservare i marcatori di fine linea (carriage return e newline o \r\n).

Edit:

Se la formattazione è importante, il testo title potrebbe essere sfuggito e messo all'interno di un elemento data-*. Usando un passaggio del mouse, una finestra popup personalizzata potrebbe mostrare l'HTML formattato.

Edit 2 - Tratto da tua domanda iniziale:

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

Si può leggere di più su data-* attributi qui: http://www.javascriptkit.com/dhtmltutors/customattributes.shtml

Insomma, in qualche codice mouseover, è possibile trovare il testo con:

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

Quindi utilizzare un div a comparsa per visualizzare myTitle

+1

Mantengono i marcatori di fine linea, semplicemente non li rendono. Ciò consente agli sviluppatori Web di indentare il loro codice senza modificare l'aspetto visivo del documento. – Kryz

+0

Sì, la formulazione avrebbe potuto essere leggermente migliore. Grazie. –

+0

Il testo in questione sta entrando in un valore di input = "" tag. È lo stesso del testo HTML ?? Ho provato il suggerimento di Ashirvad, ma non ha funzionato. – David

0

si avrebbe bisogno di leggere questo dal database direttamente. Le terminazioni di riga vengono interpretate quando l'HTML viene generato per il sito, motivo per cui viene visualizzato l'elemento td a più righe nel codice.

Quando si fa riferimento a tale elemento td, esso sputa il valore in una singola riga. Una volta perso questo dato, non è possibile ricrearlo in alcun modo.

+1

Non penso che i dati (\ n's) siano persi. – David

+0

Sembra proprio così, grazie per avermelo fatto sapere! Questo sicuramente cambia il mio modello mentale del modo in cui viene reso l'HTML. –

2

è possibile utilizzare i metodi globali javascript escape() per codificare la stringa v e unescape() per decodificarlo per l'utilizzo.

ecco violino your5

http://jsfiddle.net/jYNKG/

nel codice questa linea può essere come questo

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

Ti ho provato, ma non ha reso il valore di input \ n – David

+0

puoi fornire un jsfiddle? – Ashirvad

+0

Posso ammonire il tuo? – David

Problemi correlati