2010-06-23 20 views
5

Mam aplikację Rails, która umożliwia użytkownikom wprowadzanie tekstu w formacie HTML (P, OL, UL, BLOCKQUOTE). Chcę teraz wyświetlić krótkie podsumowanie tego tekstu, ale chcę się upewnić, że pokazuję tylko < = 4 "linie". Mogę spróbować skrócić tekst o liczbę wyświetlanych słów, ale to może się skończyć w wielu liniach, jeśli istnieją jednoelementowe elementy LI itp. Jak mogę to zrobić?Jak kontrolować liczbę wierszy wyświetlanych w bloku danych wprowadzanych przez użytkownika w formacie HTML?

+0

jakiego języka używasz? – Sarfraz

+0

Ruby/Rails, przepraszam, zapomniałem wspomnieć. – Newy

Odpowiedz

0

Czy Twoje Linie określa gdzie <br> lub \n są? Jeśli tak, policz je tylko pokazać text.substring(0, to the location-1 where the 4th break/newline is). Jeśli twoje żaby są określone przez długość (na przykład możesz pokazać tylko 20 znaków w każdej linii), dodaj to ograniczenie do swojej liczby. Jeśli tak, mogę pokazać, jak bym to zrobił.

0

Można użyć style="max-height: 40"

Ale to będzie działać tylko, jeśli wiesz o wysokości linii swoimi wierszami.

Nie sądzę, że istnieje zapis, w którym można podać maksymalne linie.

+1

"Maks. Wysokość: 4em" powinna działać lepiej. –

0

Myślę, że krótka odpowiedź brzmi, że nie można tego zrobić idealnie, zwłaszcza po stronie serwera. Jedną ze strategii byłoby po prostu oszacowanie przy użyciu czegoś, co sugerowało @Kyra.

Kolejną rzeczą do zrobienia byłoby przesłanie pełnego tekstu do przeglądarki użytkownika, a następnie dodanie go do div o odpowiedniej szerokości, z wielkością czcionki (która może być modyfikowana przez osobisty CSS użytkowników). faktycznie ma, a następnie zmierzyć wysokość wynikowego div.

Więc div może wyglądać tak:

<div id="dummyDiv" style="position:absolute;top:-10000px;width:400px;font-size:smaller"> 
user text here 
</div> 

Następnie należy zmierzyć wysokość przy użyciu javascript (tj jQuery), a jeśli tekst jest zbyt długi, próbować to na krótsze fragmenty tekstu, aż to rozsądna wysokość.

EDIT: kredyt dla tej strategii idzie flot

1

Jeśli rozumiem zostanie poprawnie chcesz pokazać coś w rodzaju podglądu HTML tekstu, który użytkownicy wpisują w textarea, jak podglądu, która pokazuje poniżej textarea tutaj na stackoverflow.

Prawdopodobnie najprostszy sposób to CSS.

#preview { height: 4em; overflow: hidden; }

To powinno działać, jeśli line-height jest normalne. To oczywiście ukrywa dodatkowy tekst. Jeśli ukrywanie jest niedopuszczalne i musisz wygenerować tylko 4 wiersze od Rubiego do wyświetlenia, to jest trudniejsze. Nie znam Rubiego, więc nie mogę podać przykładów kodu. Najpierw podzielę tekst w dowolnym miejscu, w którym zostanie wymuszona nowa linia, na przykład <br>, <p>, <li> itd. Następnie podziel dalej te porcje, ustalając, ile znaków może zmieścić się w jednej linii i dzieląc tekst w tych odstępach. Niestety nie znam kodu Ruby, ale powinieneś być w stanie najpierw podzielić tekst na te łamiące linie znaki, a następnie podzielić je dalej co X znaków, gdzie X to przybliżona ilość znaków, które możesz zmieścić na linii.Jeśli używasz czcionki o stałej szerokości, możesz dokładnie określić, ile znaków mieści się na linii. Więc skończysz z tablicą lub czymś, a potem po prostu sklejesz pierwsze 4 kawałki razem.

Mam nadzieję, że to pomaga.

0
<p><%= truncate strip_tags(object.text), :length => 150, :omission => '…' %></p> 

Próba obcięcia w ramach znaczników powoduje błąd w układzie. Rozetnę to i obcię tekst. Jeśli potrzebujesz znaczników, używałbym przecinania lub tekstyliów do obsługi formatowania, a wtedy obcięcie długości byłoby bardziej precyzyjne.

Powiązane problemy