2016-07-11 2 views
0

Я нашел несколько кодов, предоставляющих блестящие варианты, чтобы текст расширялся при нажатии на другой. Разверните/сверните функции, я считаю, что мы все с ними знакомы.Расширяемый текст в пределах расширяющегося текста

В чем меня главным образом интересует, так как я могу расширить текстовое представление из блока текста, который я уже расширил с другой строки? Я имею в виду, что я нажимаю на строку, и она показывает другую строку, которую я могу щелкнуть снова, и показывает третий, который раньше не был видимым.

Возможно ли это каким-либо образом? Большое вам спасибо за любую обратную связь, за которую вы уделяете время заранее.

+4

* Вопросы, предлагающие нам рекомендовать или находить книгу, инструмент, библиотеку программного обеспечения, учебное пособие или другие ресурсы вне сайта, не относятся к теме для переполнения стека, поскольку они склонны привлекать упрямые ответы и спам. Вместо этого опишите проблему и то, что было сделано до сих пор, чтобы ее решить. * – Script47

+0

Вы имеете в виду это? http://www.w3schools.com/css/tryit.asp?filename=trycss_display_js – mlegg

+0

Вид похожих, но действительно не совсем. Как я уже сказал, то, что я ищу, является способом расширения текста из расширенного текста. Поэтому, чтобы это было так просто, как я могу: у меня есть текст a, я нажимаю текст a и текст b показывает, затем нажимаю текст b и текст c показывает, что раньше не показывалось. Поэтому я говорю 2 шага. Один из них показывает текст b в тексте a, а затем показывает текст c в тексте b, который раньше не был видимым. –

ответ

0

Вы можете попробовать что-то вроде этого: https://jsfiddle.net/julienetienne/41g9f1pt/1/

Ключ должен получить индекс, я предпочитаю, чтобы поместить узел-лист в массивы, таким образом, вы можете использовать первые функции класса. Это грубое демо я сделал потребуется polyfill или два для поддержки IE8:

var section = document.getElementsByTagName('section')[0]; 
 
var sectionArray = [].slice.call(section.children); 
 
var lastElement; 
 

 
section.addEventListener('click', showHide, true); 
 

 
function showHide(e) { 
 
    var target = e.target; 
 
    var indexOfSection = sectionArray.indexOf(target); 
 
    var elementToToggleHeight; 
 
    // If element is a paragraph 
 
    if (target.tagName === 'P') { 
 
    var elementToToggle = section.children[indexOfSection + 1]; 
 

 
    if(indexOfSection + 1 < sectionArray.length){ 
 
     elementToToggleHeight = parseInt(window.getComputedStyle(elementToToggle, null).getPropertyValue("height"),10); 
 
     } 
 

 
    if (elementToToggleHeight) { 
 
     // Function to close all except current and first 
 
     sectionArray.forEach(function(paragraph){ 
 
     if(paragraph !== target && paragraph !== sectionArray[0]){ 
 
     paragraph.style.height = 0; 
 
     } 
 
     }); 
 

 
    } else { 
 
     if(elementToToggle) 
 
     elementToToggle.style.height = '1em'; 
 
    } 
 
    } 
 
}
p { 
 
    font-size: 1em; 
 
    cursor: pointer; 
 
    height: 0; 
 
    overflow: hidden; 
 
    background: yellowgreen; 
 
    -webkit-transition: all 0.5s ease; 
 
    -moz-transition: all 0.5s ease; 
 
    -o-transition: all 0.5s ease; 
 
    transition: all 0.5s ease; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
p:first-child { 
 
    height: auto; 
 
}
<section> 
 
    <p>The path of the righteous man is beset on all sides</p> 
 
    <p>by the inequities of the selfish and the tyranny of evil men</p> 
 
    <p>And I will strike down upon thee with great </p> 
 
    <p>vengeance and furious anger those who would attempt</p> 
 
    <p>to poison and destroy my brothers</p> 
 
</section>

+0

Ничего себе, это супер аккуратно !! Большое вам спасибо за вашу помощь, я не знаю, было ли у вас это или создалось только сейчас, если последнее дело, черт возьми, по сравнению со мной вы ОЧЕНЬ искусны. Мне нравится, как вы добавили функцию, чтобы свернуть абзацы, кроме первого и текущего! Вы мне очень помогли, я задаюсь вопросом, почему в моих поисковых попытках не было такого удивительного кода ... поверьте мне, я попытался найти ответ на это время. Во всяком случае, спасибо кучу еще раз и у меня хороший день! :) –

+0

Нет проблем. Я только что создал его сейчас, но я должен сказать, что с ним можно играть, возможно, используя дисплей: none/block, а не height. Или даже непрозрачность. Если нет, возможно, стоит обернуть каждый тег, чтобы вы могли использовать более удобное дополнение. Если у вас возникнут какие-либо проблемы, дайте мне знать, и я что-нибудь приготовлю.Ты тоже Ричард;) – Undefined

+0

Я нашел небольшую ошибку. Шаги для воспроизведения: открыть все 5 строк текста. Нажмите на 3-й. Все линии рушится, но 1-й и 3-й. –

0

Я вижу, что вы с тегами JQuery, поэтому я пишу маленький очень простой пример https://jsfiddle.net/alienpavlov/khk40ygm/2/ использовать его:

$('.expand').click(function(e) { 
 
    e.stopPropagation(); 
 
    var $expand = $(this).children('.expand.hide'); 
 
    if ($expand.length >= 1) { 
 
     $expand.removeClass('hide'); 
 
    } else { 
 
     $(this).find('.expand').addClass('hide'); 
 
    } 
 
});
div { 
 
    padding: 15px; 
 
} 
 

 
.hide { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<div class="expand"> 
 
    Some parent text 
 
    <div class="expand hide"> 
 
     1st level child 
 
     <div class="expand hide"> 
 
      2n level child 
 
     </div> 
 
    </div> 
 
</div>

В этом примере у вас может быть более 2 дочерних элементов

+1

Думаю, теперь очевидно, что я еще не слишком опытен, но я уверен в использовании элементов, которые меня интересуют. Большое спасибо за предоставление этого, в основном это ТОЧНО, что я искал, и решение было намного проще, чем я думал! Это действительно мало и просто, но простота также означает, что он легко редактируется, так что это здорово! –

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

  • Нет связанных вопросов^_^