2013-08-09 14 views
5

Może pytanie jest sformułowane niepoprawnie, ale tutaj jest to, co usiłuję zrobić z jQuery:Jak przekonwertować ciąg znaków <br> na rzeczywisty kod HTML <br> za pomocą jQuery?

Punkt wyjścia:

This is<br><br> some<br> <br> <br> <br> content 

Koniec Cel:

This is 

some 



content 

Objaśnienie:

Dokładniej, mam problemy z pracą z zawartością w div, która następnie zamienia się w obszar tekstowy podczas edycji, a następnie z powrotem na div po zakończeniu edycji. Baza danych musi przechować znaczniki br> < przy zapisie ... wydaje się, że textareas używają nowych linii (\ n) i zwraca (\ r), więc konwersja między nimi (< br>, \ n i \ r) staje się trochę problemu dla mnie.

Czy istnieje odpowiedni sposób na obsłużenie tego między wieloma przeglądarkami? Być może łatwiej będzie po prostu użyć textarea przez cały czas (i zapomnieć o div)? To jest, gdy próbuję przenieść zawartość między div i textarea, a następnie z powrotem do div, funky rzeczy zaczynają się dziać z odstępami.

Więcej szczegółów Edit:

Jeśli użytkownik kliknie zmienił i zmienia oryginalnego div do textarea, zaczną dokonywania zmian i kliknij zrobić, ale zdecydujesz się anulować edycję i powrócić do starej zawartości zamiast. Textarea zamienia się z powrotem w div, a stara zawartość (przechowywana w ukrytym div) zastępuje to, co napisał użytkownik. Stąd te same treści.

Edit:

Bardzo zwrotne, dziękuje wszystkim! Wolałbym nie korzystać z css, ponieważ musi działać na stronach, które zostały już opracowane i wymagają edycji na wszystkich elementach div przechowujących zawartość na każdej stronie. < br> muszą być zapisane w bazie danych.

+5

Wskazałeś na problem! Obszar tekstowy używa \ r jako podział wiersza. HTML używa
TCHdvlp

+0

Czy próbowałeś czegoś takiego jak '.replace (/ \ n/g,"
")'? –

+2

Możesz użyć 'white-space: pre-line;' na div i nie martw się o przechowywanie go jako '
'. ;-) –

Odpowiedz

5

Czy to pomaga?

function replaceLineBreaksWithHTML(string) { 
return string !== undefined ? string.replace(/\n/g, '<br/>') : ""; 
} 

function replaceHTMLWithLineBreaks(string) { 
return string !== undefined ? string.replace(/<br\/>/gi, '\n') : ""; 
} 
+0

Wygląda na to, że chcę tego efektu, ale dodaje więcej miejsca, niż jest to wymagane. Z jakiegoś powodu większość z tych odpowiedzi dodaje więcej miejsca. Prawie tak, jakby podwajał się na białej przestrzeni. –

+1

Moje rozwiązanie nie dodaje żadnych białych znaków, może być tak, że istnieją białe spacje, o których wcześniej nie myślisz. Możesz spróbować wywołać .trim() na łańcuchach, aby usunąć białe znaki na początku i na końcu. – JSager

1

można przekazać tekst pomiędzy textarea i div elementów w ten sposób:

(zauważ, że używam jQuery, ale nie jest to konieczne, jest to tylko demo)

$("#b1").click(function(){ 
    var text = $("textarea").val().replace(/\n/g, "<br>"); 
    $("div").html(text); 
}); 

$("#b2").click(function(){ 
    var text = $("div").html().replace(/<br>/gi, "\n"); 
    $("textarea").val(text); 
}); 

DEMO

0

Możesz użyć zamień wyrażenie do konwersji br na \ n :)

$('#mytextarea').val($.trim($('#mydiv').html().replace(/<br>/g, '\n'))); 

Wystarczy spojrzeć na ten skrzypce: http://jsfiddle.net/N7GkH/

0

Korzystając parseHTML do tej pracy, zważywszy, że używasz jQuery.

var html = $.parseHTML('This is<br><br> some<br> <br> <br> <br> content'); 
html.appendTo(body); 
Powiązane problemy