如何从Markdown创建jQuery选项卡

时间:2009-03-06 12:35:13

标签: javascript jquery tabs markdown

我目前正在运行基于PHP的内容管理系统,该系统在Markdown Extra的帮助下生成其HTML内容。大多数内容由标题和子标题组成,这导致了很长的页面。在每个页面的开头,我使用列表和Markdown Extra's 标题ID属性创建了一个目录。

为了缩短页面视图的长度,我想在第一级标题上使用jQuery的Tabs Plugin

问题是Markdown Extra的输出与jQuery Tabs Plugin期望的内容不兼容,因为Markdown Extra没有将节的内容包装到单独的div标签中。

有没有办法让这两个图书馆一起工作?

修改

这就是HTML输出的样子:

 <p>Some intro text...</p>
 <h3>Table of content</h3>
 <ul>
  <li><a href="#sub1">Topic 1</a></li>
  <li><a href="#sub2">Topic 2</a></li>
  <li><a href="#sub3">Topic 3</a></li>
 </ul>
 <h3 id="sub1">Topic 1</h3>
 <p>The content of this topic.</p>
 <h3 id="sub2">Topic 2</h3>
 <p>The content of this topic.</p>
 <h3 id="sub3">Topic 3</h3>
 <p>The content of this topic.</p>

..这是相应的Markdown代码:

Some intro text...

###Table of content###

* [Topic 1](#sub1)
* [Topic 2](#sub2)
* [Topic 3](#sub3)

###Topic 1### {#sub1}

The content of this topic.

###Topic 2### {#sub2}

The content of this topic.

###Topic 3### {#sub3}

The content of this topic.

解决方案

在cobbal的帮助下,我制作了这个jQuery语句,将Markdown标记转换为Tabs插件可以使用的内容:

  $("#tabs :header").each(function() 
  {
    var id = $(this).attr("id");
    if(id=="") return;    
    var div = $("<div>");
    var tagName = this.tagName;    
    $(this).nextAll().each(function()
    {
      if(this.tagName==tagName) return false;
      div.append(this);
    });
    $(this).removeAttr("id");
    div.attr("id", id);
    $(this).before(div);
    div.prepend(this);
  });

但事实上,我需要转换标记以适应Tabs插件,而不是仅仅告诉Tabs插件它应该以不同的方式选择其内容,这可能使这个解决方案不是理想的解决方案。

2 个答案:

答案 0 :(得分:2)

在您的document.ready

$("#sub1,#sub2,#sub3").each(function() {
    var containerDiv = $("<div>").attr("id", $(this).attr("id") + "div");
    $(this).before(containerDiv);
    containerDiv.append(this);
});

并将降价改为

...
* [Topic 1](#sub1div)
* [Topic 2](#sub2div)
* [Topic 3](#sub3div)
...

答案 1 :(得分:0)

在我看来,你可以自己将目录包装在一个div中。

您链接到它的Markdown Extra页面的一半显示了如何在div中插入Markdown,如下所示:

PHP Markdown Extra为您提供了一种将Markdown格式的文本放入任何内容的方法 块级标签。您可以通过向标记添加markdown属性来执行此操作 值1 - 给出markdown =“1” - 像这样:

<div markdown="1">
This is *true* markdown text.
</div>

markdown =“1”属性将被删除,其内容将从Markdown转换为HTML。最终结果如下:

<div>

<p>This is <em>true</em> markdown text.</p>

</div>