如何使用 Markdown 创建 jQuery 选项卡

发布于 2024-07-14 19:41:59 字数 2359 浏览 10 评论 0原文

我目前正在运行一个基于 PHP 的内容管理系统,该系统在 Markdown 额外。 大多数内容都是由标题和副标题构成的,这会导致页面很长。 在每个页面的开头,我在列表和 Markdown Extra 的帮助下创建了一个目录 标头 ID 属性

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

问题是 Markdown Extra 的输出与 jQuery <需要 a href="http://docs.jquery.com/UI/Tabs" rel="nofollow noreferrer">Tabs 插件,因为 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);
  });

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

I'm currently running a PHP based Content-Management-System that generates its HTML content with the help of Markdown Extra. Most of the content is structured by headings and sub-headings which results in a very long page. At the beginning of each page I create a table of contents with the help of a list and Markdown Extra's Header Id Attribute.

In oder to shorten the length of a page view I'd like to use the jQuery's Tabs Plugin on the first level of headings.

The Problem is that the output of Markdown Extra is not compatible with what the jQuery Tabs Plugin is expecting because Markdown Extra is not wrapping the content of a section into a separate div-tag.

Is there a way how to make those two libraries work together?

EDIT

This is what the HTML output is looking like:

 <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>

.. and this is the corresponding Markdown code:

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.

Solution

With a little help of cobbal I made this jQuery statement that will transform the Markdown markup into something that the Tabs plugin will work with:

  $("#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);
  });

But the fact that I need to transform the markup to fit the Tabs plugin rather than just tell the Tabs plugin that it should select its content in a different way may made this solution not the ideal one.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

遥远的绿洲 2024-07-21 19:41:59

在你的 document.ready 上

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

并将你的 markdown 更改为

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

on your document.ready

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

and change your markdown to

...
* [Topic 1](#sub1div)
* [Topic 2](#sub2div)
* [Topic 3](#sub3div)
...
别理我 2024-07-21 19:41:59

在我看来,您可以自己将目录包装在 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>

It looks to me like you could wrap the table of contents in a div yourself.

Half way down the Markdown Extra page that you linked to it shows how to insert Markdown inside a div, like this:

PHP Markdown Extra gives you a way to put Markdown-formatted text inside any
block-level tag. You do this by adding a markdown attribute to the tag with
the value 1 — which gives markdown="1" —
like this:

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

The markdown="1" attribute will be stripped and the ’s content will be converted from Markdown to HTML. The end result will look like this:

<div>

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

</div>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文