Чи можна визначити назву класу на абзаці за допомогою Markdown?


139

Чи можна визначити назву класу на абзаці за допомогою Markdown? Якщо так, то як?


54
Мені невідомий більш точний спосіб запитати "Чи можна визначити ім'я класу на абзаці за допомогою Markdown?" Ви забули прочитати заголовок?
Райан Флоренція

[Biased] Якщо ви є користувачем вузла, будь ласка, перевірте Rho . Хоча це не на 100% сумісне з Markdown, ви все ще можете вважати його дуже привабливим, оскільки в ньому є необхідна вам функція.
втілився

Відповіді:


76

Dupe: Як встановити атрибут класу HTML у Markdown?


Рідно? Ні. Але ...

Ні, синтаксис Маркдана не може. Ви можете встановити значення ідентифікатора за допомогою Markdown Extra.

Ви можете використовувати звичайний HTML, якщо хочете, і додати атрибут markdown="1"для продовження конверсії розмітки в елементі HTML. Для цього потрібен Markdown Extra .

<p class='specialParagraph' markdown='1'>
**Another paragraph** which allows *Markdown* within it.
</p>

Можливе рішення: (Не перевірене і призначене для <blockquote>)

В Інтернеті я знайшов таке:

Функція

function _DoBlockQuotes_callback($matches) {

    ...cut...

    //add id and class details...
    $id = $class = '';
    if(preg_match_all('/\{(?:([#.][-_:a-zA-Z0-9 ]+)+)\}/',$bq,$matches)) {
        foreach ($matches[1] as $match) {
            if($match[0]=='#') $type = 'id';
            else $type = 'class';
            ${$type} = ' '.$type.'="'.trim($match,'.# ').'"';
        }
        foreach ($matches[0] as $match) {
            $bq = str_replace($match,'',$bq);
        }
    }

    return _HashBlock(
        "<blockquote{$id}{$class}>\n$bq\n</blockquote>"
    ) . "\n\n";
}

Відмітка

>{.className}{#id}This is the blockquote

Результат

<blockquote id="id" class="className">
    <p>This is the blockquote</p>
</blockquote>

2
(Тестовано з аналізатором MaRuKu), ви можете використовувати просто "{.class-name}" на початку рядка тексту для впливу на тег P. Однак частина ігнорується.
Девід Хатчісон

75

Сирий HTML насправді ідеально підходить для розмітки. Наприклад:

Normal *markdown* paragraph.

<p class="myclass">This paragraph has a class "myclass"</p>

Просто переконайтеся, що HTML не знаходиться в кодовому блоці.


31
Проблема такого підходу полягає в тому, що внутрішній текст більше не розмічається.
akauppi

@akauppi Так; це, однак, можна обійти за допомогою тега span.
Seraphendipity

13

Якщо ваше середовище JavaScript, використовуйте markdown-це разом із плагіном markdown-it-attrs :

const md = require('markdown-it')();
const attrs = require('markdown-it-attrs');
md.use(attrs);

const src = 'paragraph {.className #id and=attributes}';

// render
let res = md.render(src);
console.log(res);

Вихідні дані

<p class="className" id="id" and="attributes">paragraph</p>

jsfiddle

Примітка. Будьте в курсі аспекту безпеки, коли дозволяєте атрибути у вашій відмітці!

Відмова, я є автором розмітки.


Markdown It Rocks !!
Оле

8

Маркдаун повинен мати цю можливість, але це не так. Натомість ви застрягли з наборами Markdown, характерними для мови:

PHP: Markdown Extra
Ruby: Kramdown , Maruku

Але якщо вам потрібно дотримуватися справжнього синтаксису Markdown, ви застрягли, вставляючи сирий HTML, що менш ідеально.


7

Якщо ваш аромат відмітки крамдаун, ви можете встановити клас css таким чином:

{:.nameofclass}
paragraph is here

Потім у вашому файлі css ви встановлюєте css таким чином:

.nameofclass{
   color: #000;
  }

5

Ось робочий приклад крамдауну після відповіді @ Яріна.

A simple paragraph with a class attribute.
{:.yourClass}

Довідка: https://kramdown.gettalong.org/syntax.html#inline-attribute-lists


1
Я про це не здогадувався. Дуже добре працює з попереднім попередженням Markdown (Sublime 3), який використовує вбудований Python Markdownаналізатор.
Михай

3

Як було сказано вище, сама відмітка залишає вас на цьому. Однак, залежно від реалізації, існують деякі шляхи вирішення:

Принаймні одна версія MD вважає <div>тег рівня блоку, але <DIV>є лише текстом. Однак усі броузери не чутливі до регістру. Це дозволяє зберегти синтаксис простоти MD за рахунок додавання тегів контейнерів div.

Отже, наступне рішення:

<DIV class=foo>

  Paragraphs here inherit class foo from above.

</div>

Недоліком цього є те, що у вихідному коді є <p>теги, що обертають <div>рядки (обидва вони, перше тому, що це не так, а друге, оскільки воно не відповідає. Жоден браузер не метушиться з цього приводу, що я знайшов, але код переміг " t валідація. MD прагне все-таки розміщувати запасні <p>теги.

Кілька версій розмітки реалізують умову, і <tag markdown="1">в цьому випадку MD виконає звичайну обробку всередині тегу. Наведений вище приклад стає:

<div markdown="1" class=foo>

  Paragraphs here inherit class foo from above.

</div>

Поточна версія MultiMarkdown Fletcher дозволяє атрибутам переходити за посиланням, якщо використовується посилання на нього.


Примітка. Переконайтеся, що ви використовуєте маркери коду; більша частина цієї публікації була прихованою, оскільки її інтерпретували як теги HTML.
Лоуренс Дол

Спасибі - хак DIV - це єдина відповідь, яка, здається, працює з pegdown / cegdown. (Pegdown також розширюється за допомогою плагінів, тому я можу це зробити в довгостроковій перспективі)
Корній,

2

Для тонкої розмітки використовуйте це:

markdown:
  {:.cool-heading}
  #Some Title

Перекладається на:

<h1 class="cool-heading">Some Title</h1>

1

Слід також зазначити, що <span>теги дозволяють всередині них - елементи на рівні блоку заперечують MD, як правило, всередині них, якщо ви не налаштовуєте їх не робити цього, але стилі в рядках, що дозволяють використовувати MD всередині них. Як такий, я часто роблю щось подібне ...

This is a superfluous paragraph thing.

<span class="class-red">And thus I delve into my topic, Lorem ipsum lollipop bubblegum.</span>

And thus with that I conclude.

Я не на 100% впевнений, що це універсально, але, мабуть, це стосується всіх редакторів MD, якими я користувався.


0

Якщо вам просто потрібен вибір для цілей Javascript (як я), ви можете просто використовувати hrefатрибут замість classабо id:

Просто зробіть це:

<a href="#foo">Link</a>

Markdown не буде ігнорувати або видаляти hrefатрибут, як це робиться з класами та ідентифікаторами.

Тож у вашому Javascript або jQuery ви можете:

$('a[href$="foo"]').click(function(event) {

    ... do your thing ...

    event.preventDefault();
});

Принаймні, це працює в моїй версії Markdown ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.