2013-03-07 9 views
10

Mam akapit, który chcę skrócić z opcją kliknięcia "czytaj więcej" i pozostawić otwarty z resztą zawartości. Treść pochodzi z pola bazy danych. Oto co mam do skróconej:Szyny obcinane z przełącznikiem "czytaj więcej"

<%= truncate(@major.glance, :length => 250, :omission => '... Read More')%> 

I nie wydają się znaleźć sposób, aby to zrobić z danymi ciągniętych z bazy danych. Widzę wiele przykładów, używając pełnego tekstu z tekstem, który chcesz ukryć w oddzielnym znaczniku div. Ponieważ jednak ta zawartość pochodzi z bazy danych i jest dynamiczna, nie mogę znaleźć żadnych informacji, jak to zrobić.

+0

To była prosta odpowiedź, która sprawdziła się u mnie. http://stackoverflow.com/a/26854494/5551783 – dgreen22

Odpowiedz

22

Można wypróbować następujące

<div> 
    <% if @major.glance.length > 250 %> 
    <%= link_to_function truncate(@major.glance, length: 250), "$(this).parent().html('#{escape_javascript @major.glance}')" %> 
    <% else %> 
    <%= @major.glance %> 
    <% end %> 
</div> 

lub jeśli wolisz używać Read more odnośnik

<div> 
    <% if @major.glance.length > 250 %> 
    <%= truncate(@major.glance, length: 250) %> 
    <%= link_to_function '...Read more', "$(this).parent().html('#{escape_javascript @major.glance}')" %> 
    <% else %> 
    <%= @major.glance %> 
    <% end %> 
<div> 

UPDATE

Ponieważ w Rails 4, link_to_function jest przestarzała i jest wskazane jest, aby nie powodować zakłóceń js, użyj następującej

<div> 
    <% if @major.glance.length > 250 %> 
    <%= truncate(@major.glance, length: 250) %> 
    <%= link_to '...Read more', '', class: "read-more-#{@major.id}" %> 
    <script> 
     $('.read-more-<%= @major.id %>').on('click', function(e) { 
     e.preventDefault() 
     $(this).parent().html('<%= escape_javascript @major.glance %>') 
     }) 
    </script> 
    <% else %> 
    <%= @major.glance %> 
    <% end %> 
<div> 
+1

to tylko kontynuacja, dla której nie można użyć opcji 'pominięcie' jako łącza, ponieważ metoda skracania obejmuje to w liczbie znaków. Możesz go użyć, ale musisz dodać logikę do obliczania liczby znaków, które chcesz obcinać. – jvnill

+0

można zmienić część js, aby ponownie zmienić zawartość rodzica. lub dodaj 2 divy, jeden z obciętą częścią, drugi z nieskasowanym, po prostu przełącz div. – jvnill

+0

po prostu zmień tę część '" $ (this) .parent(). Html ('# {escape_javascript @ major.glance}') "' na odpowiednik MooTools i jesteś ustawiony. – jvnill

5

Wiem, że przyłączam się do tej rozmowy nieco późno. Zajmowałem się tą samą kwestią, próbując powyższego rozwiązania, które działa dobrze. Jednak ukryte treści SEO, które zostały ukryte, nie zostały zindeksowane przez wyszukiwarki. Sprawdziłem też Lynx, a link nie może być przestrzegany (oczywiście). Tak ustalone dla tego rozwiązania przez Jed Foster | readmore.js - Lynx może odczytać go poprawnie i teraz czekam na indeks SE, aby zaktualizować i zobaczyć, czy mogę znaleźć się w wynikach wyszukiwania. Na wypadek, gdyby ktoś znalazł się w podobnej sytuacji ...

+0

Dzięki za poinformowanie mnie o readmore.js jest to dokładnie ten typ rzeczy, którą próbowałem zrobić. To wygląda świetnie. Dzięki za udostępnienie! – lflores