2016-07-11 98 views
0

我發現了幾個代碼,提供了很棒的選項,可以在點擊另一個文字時展開文字。展開/摺疊功能,我相信我們都有點熟悉它們。在展開文字中展開文字

但是我主要感興趣的是,我怎樣才能擴大文本顯示從我已經從另一行擴展的文本塊? 我的意思是,我會點擊一條線,它會顯示另一條線,我可以再次點擊,並顯示出第三條線之前根本不可見的線。

這有可能以任何方式?非常感謝您提前爲您提供的任何反饋意見!

+4

*問題要求我們推薦或找到一本書,工具,軟件庫,教程或其他非本地資源,因爲它們傾向於吸引Stack Overflow自發的答案和垃圾郵件。相反,請描述問題以及迄今爲止解決問題所做的工作。* – Script47

+0

你是說這個嗎? http://www.w3schools.com/css/tryit.asp?filename=trycss_display_js – mlegg

+0

類似的排序,但實際上並不完全。正如我所說,我正在尋找的是從擴展文本擴展文本的方法。因此,儘可能簡單地說:我有文本a,我點擊文本a和文本b顯示,然後點擊文本b和文本c顯示,這在之前沒有顯示。所以我說了兩個步驟。一種是在文本a中揭示文本b,然後揭示文本b中的文本c,而這些文本根本不可見。 –

回答

0

你可以嘗試這樣的事情:https://jsfiddle.net/julienetienne/41g9f1pt/1/

的關鍵是要獲得索引,我喜歡把節點列表分爲數組,這樣你可以使用一流的功能。 這種粗糙的演示中,我提出需要對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

沒有probs。我現在只是創建它,但我不得不說它可能是值得玩的,也許通過使用display:none/block而不是height。甚至不透明。 如果不是,它可能是值得包裝每個標籤,所以你可以使用更好的填充。如果你有任何問題,請告訴我,我會做點什麼。你也是理查;) – Undefined

+0

我發現了一個小錯誤。重現步驟:打開全部5行文字。點擊第三。所有線路都會倒塌,但第一和第三。 –

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>

在這個例子中,你可以有兩個以上的子元素

+1

我想現在很明顯,我還沒有太多經驗,但我有信心使用感興趣的元素。非常感謝你提供這個,基本上這就是我正在尋找的東西,解決方案比我想象的簡單得多!它確實很小很簡單,但簡單也意味着它很容易編輯,所以這太棒了! –