Могу ли я определить имя класса в абзаце, используя Markdown? - PullRequest
116 голосов
/ 29 июня 2009

Можно ли определить имя класса в абзаце с помощью Markdown? Если да, то как?

Ответы [ 9 ]

67 голосов
/ 29 июня 2009

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


Врожденная? Нет, но ...

Нет, синтаксис Markdown не может. Вы можете установить значения идентификатора с помощью Markdown Extra.

Вы можете использовать обычный HTML , если хотите, и добавить атрибут markdown="1", чтобы продолжить преобразование уценки внутри элемента HTML. Для этого требуется Уценка 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";
}

Markdown

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

Результат

<blockquote id="id" class="className">
    <p>This is the blockquote</p>
</blockquote>
66 голосов
/ 29 июня 2009

Необработанный HTML действительно отлично подходит для уценки. Например:

Normal *markdown* paragraph.

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

Просто убедитесь, что HTML не находится внутри блока кода.

7 голосов
/ 02 декабря 2013

Markdown должен иметь эту возможность, но не имеет. Вместо этого вы застряли с языком надстроек Markdown:

PHP: Уценка Extra
Рубин: Крамдаун , Маруку

Но если вам нужно соблюдать истинный синтаксис Markdown, вы застряли на вставке необработанного HTML, что не так идеально.

6 голосов
/ 29 августа 2016

Если ваша среда JavaScript, используйте markdown-it вместе с плагином 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-attrs.

4 голосов
/ 06 апреля 2018

Если ваш вид уценки kramdown, вы можете установить класс css следующим образом:

{:.nameofclass}
paragraph is here

Затем в вашем файле CSS вы устанавливаете CSS следующим образом:

.nameofclass{
   color: #000;
  }
4 голосов
/ 08 октября 2017

Вот рабочий пример для kramdown после ответа @ Yarin.

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

Ссылка: https://kramdown.gettalong.org/syntax.html#inline-attribute-lists

3 голосов
/ 26 января 2014

Как уже упоминалось выше, сама уценка оставляет вас на этом. Однако в зависимости от реализации существуют некоторые обходные пути:

По крайней мере одна версия MD считает <div> тегом уровня блока, но <DIV> - это просто текст. Однако все брошюры нечувствительны к регистру Это позволяет сохранить простоту синтаксиса MD за счет добавления тегов контейнера Div.

Итак, это обходной путь:

<DIV class=foo>

  Paragraphs here inherit class foo from above.

</div>

Недостатком этого является то, что в выходном коде есть теги <p>, заключающие строки <div> (оба - первый, потому что это не так, и второй, потому что он не совпадает. Я обнаружил, но код не будет проверен. MD все равно имеет тенденцию добавлять в запасные теги <p>.

Несколько версий уценки реализуют соглашение <tag markdown="1">, в этом случае MD будет выполнять обычную обработку внутри тега. Приведенный выше пример становится:

<div markdown="1" class=foo>

  Paragraphs here inherit class foo from above.

</div>

Текущая версия MultiMarkdown от Fletcher позволяет атрибутам переходить по ссылке при использовании ссылочных ссылок.

1 голос
/ 17 июля 2018

В тонкой уценке это:

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

Переводится как:

<h1 class="cool-heading">Some Title</h1>
0 голосов
/ 07 июня 2018

Если вам просто нужен селектор для целей 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 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...