2015-01-07 2 views
2

Привет, мой код довольно прост, но Id как для целей дизайна, чтобы держать все в чистоте, на данный момент Im тянет все описание, которое похоже. Некоторые могут быть огромными, другие могут быть довольно маленькими, так или иначе сделайте это честно. Я решил сделать кнопку «Читать дальше», и как только я нажму на нее, просто расширьте текст таким образом: SO, как-то, чтобы показать первые 160 символов после этого ... затем кнопку ссылки ReadMore, которая, когда вы нажимаете кнопку, расширяется и отображается весь текст Heres моего сценария, который я использую сейчас:Подробнее о результатах базы данных

<p><?PHP echo $thismovie['description']; ?></p> <div style="text-align:right"> 

Так что я хотел бы знать, как это делается, и, если это возможно только с помощью JavaScript, спасибо!

+0

Да, вы используете JavaScript для достижения этой цели. В Интернете есть много рабочих примеров, которые можно легко получить в Интернете. – Axel

+0

Да, есть, но не тогда, когда результат commin от mysql, я, похоже, новичок в javascript и php тоже не очень хорош, и я искал это, прежде чем я разместил этот вопрос. Вытягивание результатов из databse + expand text pull aent легко – MEX

+0

Это легко. Вы просто выводите все описание и скрываете «лишнюю» длину описания с помощью javascript. Если целью является то, что пользователь сможет щелкнуть и показать полное описание, вам нужно будет загрузить все описание на страницу. – Axel

ответ

2

для PHP способом:

$firstdesc=substr($thismovie['description'], 0, 160); 

и когда для чтения более прессованный.

$totaldesc=substr($thismovie['description'], 160); 

Конечно, вы можете это сделать и с помощью Javascript.

+0

Так что это было бы примерно так:

+0

Я вижу :) Мне нравится Pure PHP больше, спасибо :) – MEX

+1

@MEX Вы могли бы хотеть добавить: если (STRLEN ($ thismovie [ 'описание'])> 160) {// добавить кнопку читать далее .. } Так что вы не добавляете его ни для чего. –

1

использовать стиль css `text-overflow: ellipsis; и jquery для полной функции.

$('#read-more').click(function() { 
 
    $('#description').css('width','100%'); 
 
});
#description { 
 
    white-space: nowrap; 
 
    width: 12em; 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="description">This is some long text that will not fit in the box</div> <a id="read-more" href="#">Read More</a>

+0

эта работа для каждого отдельного описания, но одна надработала, спасибо, по крайней мере, за ответ, спасибо! – MEX

+0

Я рад, что вы нашли свой ответ. Решение Mi работает только один раз, потому что я использовал экземпляр id класса. –

3

Хотя вы, конечно, можете использовать PHP, другим способом является правильное использование свойства text-overflow css.

Этот метод будет оказывать меньшее влияние на сервер, особенно если на странице имеется множество описаний. Использование PHP для конкатенации каждого из них неэффективно и не является правильным способом для этого.

Удаление класса намного проще. И вы можете добавить его обратно, когда хотите показать меньше.

<style> 
    .ellipsis { 
     white-space: nowrap; 
     text-overflow: ellipsis; 
     overflow: hidden; 
     height: 14px; 
    } 
    .description { 
     width: 300px; 
     background: #ccc; 
     padding: 3px; 
     margin-top: 30px; 
     margin-bottom: 0; 
    } 
</style> 

<!-- It is likely you would use a PHP loop for this but for illustration 
    purposes I've listed them out --> 

<p class="description ellipsis"><?=$movie[0]['description']?></p> 
<a href="#" class="read-more">Read More</a> 

<p class="description ellipsis"><?=$movie[1]['description']?></p> 
<a href="#" class="read-more">Read More</a> 

<p class="description ellipsis"><?=$movie[2]['description']?></p> 
<a href="#" class="read-more">Read More</a> 

<!-- use as many as you want with no additional strain on server. --> 

С Jquery ... http://jsfiddle.net/kx2nbv3z/

<!-- Include jQuery --> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script> 
    $(document) 
     .on('click','.read-more',function() { 
      $(this).removeClass('read-more').addClass('show-less').html('Show Less').prev('.description').removeClass('ellipsis'); 
     }) 

     .on('click','.show-less',function() { 
      $(this).removeClass('show-less').addClass('read-more').html('Read More').prev('.description').addClass('ellipsis'); 
     }) 
    ; 
</script> 

С PURE JAVASCRIPT ... http://jsfiddle.net/8wsbw0u8/

<script> 


if (document.body.addEventListener) { 
    document.body.addEventListener('click',yourHandler,false); 
} 
else { 
    document.body.attachEvent('onclick',yourHandler);//for IE 
} 

function yourHandler(e) { 
    e = e || window.event; 
    var target = e.target || e.srcElement; 
    prev = target.previousSibling.previousSibling; 
    if (target.className.match(/read-more/)) { 
     target.className="show-less"; 
     target.innerHTML = "Show Less"; 
     prev.setAttribute("class","description"); 
     console.log(prev); 
    } 
    else if (target.className.match(/show-less/)) { 
     target.className="read-more"; 
     target.innerHTML = "Read More"; 
     prev.setAttribute("class","description ellipsis"); 
    } 
} 
</script> 
+0

Да, этот сценарий действительно замечательный. Я пытаюсь ответить на ваш вопрос, но вытаскивая несколько результатов из базы данных, и когда я нажимаю дальше, он открывается для всех одновременно, я в настоящее время пытаюсь закончить ответ с помощью php, и я буду покажите, как я это сделал^_^ – MEX

+0

См. обновленный ответ, используя классы вместо ids. Это накладывает меньше накладных расходов на ваш сервер, особенно когда на странице имеется тонна описаний. – zgr024

+0

Также добавлена ​​возможность повернуть вспять процесс. Посмотрите сами ... http://jsfiddle.net/kx2nbv3z/ – zgr024

Смежные вопросы