Markdown中的可折叠标题到html

Posted

技术标签:

【中文标题】Markdown中的可折叠标题到html【英文标题】:Collapsible header in Markdown to html 【发布时间】:2015-10-12 07:03:43 【问题描述】:

我们的内部 git-lab wiki 使用 Markdown。我做了几篇文章的总结,想把它们发布到我们的wiki上,这样如果我点击标题,它应该展开并且文本应该变得可见,基本上就像example

Markdown 有这个展开/折叠/折叠功能吗?

【问题讨论】:

【参考方案1】:

试试:

<details>
  <summary>Your header here! (Click to expand)</summary>
  Your content here...
  > markup like blockquote's should even work on github!
  more content here...
</details>

你可以在这里尝试这种事情:

    <details>
      <summary>Your header here! (Click to expand)</summary>
      Your content here...</br>
      (markup only where supported)</br>
      more content here...</br>
    </details>

这适用于我的 Chrome,但可能不适用于其他浏览器。 还有一些related posts at github。

【讨论】:

适用于 Chrome 和 ios Safari,但不适用于 Firefox 或 IE。对我来说已经足够了,真的。【参考方案2】:

简短回答:不,Markdown 不直接提供类似的功能,但通过一些工作,您可能能够构建一些有效的东西。

要使这样的功能正常工作,您需要一些 CSS 和/或 javascript 来控制动画等。虽然您可能能够让这样的功能在任何 html 上工作,但在 Markdown 输出上并不是特别容易.

理想情况下,每个可折叠部分都将包装在一个 div 中:

<div id="section1">
  <h1>Section 1</h1>
  <p>Section 1 content</p>
  <div id="section1-1">
    <h2>Section1-1</h2>
    <p>section 1-1 content</p>
  </div>
    <div id="section1-2">
    <h2>Section1-2</h2>
    <p>section 1-2 content</p>
  </div>
</div>

然后您可以使用一些 CSS/JavaScript 来折叠各个部分。但是,Markdown 没有节的概念。而不是上面的,Markdown 会给你这个平面文档:

<h1>Section 1</h1>
<p>Section 1 content</p>
<h2>Section1-1</h2>
<p>section 1-1 content</p>
<h2>Section1-2</h2>
<p>section 1-2 content</p>

解决方案需要遍历整个文档,将其分解为各个部分并将每个部分包装在 div 中。您可以找到 couple examples 作为 Python-Markdown 解析器的扩展。但是,如果有任何有关您工作环境的信息,为您指明正确的方向会有点困难。此外,*** 不应该是一个工具推荐网站。但是,通过观察其他人如何解决问题(在我指出的示例中),您应该能够找到类似的解决方案。

一旦你正确地包装了这些部分,然后用一点 JavaScript 来折叠/折叠各个部分,剩下的就可以处理了。但是,这是一个单独的问题,已在此处多次询问和回答。有关该部分问题的解决方案,请参阅侧栏上列出的一些“相关”问题。

甚至有可能存在一些 JavaScript 库,它们将采用纯 HTML 内容,进行部分包装并实现折叠/折叠功能。但是,这样的库可能有点笨重并且会降低您的网站速度,因此请继续使用阳离子。

【讨论】:

太好了,感谢您的回答!通常我使用 R 编写 markdown 文件,然后我只需将 .md 文件上传到 git-lab 存储库。但在这种情况下,当我在 wiki 中发帖时,我只是在浏览器中工作并保存页面。 想知道现在,4.5 年后是否有一种简单的方法可以将所有标题转换为 html 中的折叠部分? :)【参考方案3】:

存在一个 github 存储库可以满足您的需求:szhielelp/md-post-header-collapse。

一个 jquery 工具,可以在 markdown post 中使标题可折叠

https://szhshp.org/tech/2016/08/23/jekyllmdpostcollapse.html 是文档,你可以看看那个插件做了什么。

基本思想是每次单击标题时反转所有标题的子元素显示/隐藏状态。

    let collapse = function (headerElem) 

        let isShow = headerElem.hasClass('headerCollapsed') ? true : false;
        if (isShow) 
            // collapsed
            headerElem.removeClass('headerCollapsed');
         else 
            headerElem.addClass('headerCollapsed');
        

        /* collapse all header's children */
        headerCollapse(headerElem, headerElem.next(), isShow);
    

    let headerCollapse = function (headerElem, currentElem, isShow) 
            /* I remove the end condition  */
            if (isShow) 
                currentElem.show(400);

                /* reset status */
                currentElem.removeClass('headerCollapsed')
             else 
                currentElem.hide(400);
            

            headerCollapse(headerElem, currentElem.next(), isShow)
        
    

【讨论】:

以上是关于Markdown中的可折叠标题到html的主要内容,如果未能解决你的问题,请参考以下文章

Clojure 中的可折叠集合是啥?

R中的可折叠树

Bootstrap 2.3 android 手机中的可折叠菜单问题

Visual Studio 2012(C#)中的可折叠(条件、循环)块[重复]

jquery mobile外部面板中的可折叠列表视图无法正确显示

您可以在 VS 2008 中的 C++ 中创建类似 #Region 的可折叠范围吗?