9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

markdownを見出しごとに<section>で囲んだHTMLにする

Last updated at Posted at 2017-06-11

自分用メモも兼ねて。jQueryとmarked.jsを使います。

markdownをHTMLへ変換

markdownはすでにテキストとして取得できてmarkdown変数に格納されているものとします。また、<main>の中に<article>を作り、その中にmarkdownをHTMLに変換したものを入れます。

marked.jsはとても簡単で、marked関数にmarkdownのテキストを渡すだけでHTMLが返ってきます。

const HTML = marked(markdown);
$("main").append(`<article>${HTML}</article>`);

このコードはmarkdownをHTMLに変換し、<main>に<article>として追加します。

これでmarkdownをただ入れるだけのことはできますが、今回は見出しごとに<section>を入れるので、さらにひと工夫します。


<section>で囲む

HTMLをjQueryで操作します。先ほどのコードに以下を追加します。また、h2以降を対象とします。

$("main article").find("h2, h3, h4, h5, h6").each(() => {
    const $this = $(this);
    $this.nextUntil($this.prop("tagName")).addBack().wrapAll("<section></section>");
});

このコードは、<main>の中の<article>の中にある<h2>, <h3>, <h4>, <h5>, <h6>からそれぞれ、次に同じ見出しタグが現れるか、<article>や<section>の最後に到達するまでの間にある要素を取得し、はじめの見出しと合わせて<section>で囲みます。

これで<section>で囲むコードは完成です。


あとがき

今回が初のQiita投稿です。なにか間違い等ありましたら指摘して頂けるとありがたいです。

たまたまmarkdownを扱うことがあり、「<section>を使うにはどうしたらいいんだろう」と思い、考えたことを書きました。この記事が役に立つことがあれば幸いです。最後まで読んでいただきありがとうございました。

9
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?