Подобная Markdown функциональность для всплывающих подсказок
Проблема:
Использование Vanilla JavaScript Я хочу:
Изменить это:
<div>
<p>
Hello [world]{big round planet we live on}, how is it [going]{verb that means walking}?
</p>
<p>
It is [fine]{a word that expresses gratitude}.
</p>
</div>
На это:
<div>
<p>
Hello <mark data-toggle="tooltip" data-placement="top" title="big round planet we live on">world</mark>, how is it <mark data-toggle="tooltip" data-placement="top" title="verb means walking">world</mark>?
</p>
<p>
It is fine <mark data-toggle="tooltip" data-placement="top" title="a word that expresses gratitude">thanks</mark>.
</p>
</div>
визуально это выглядит так:
is somehow similar to "markdown" edit functionalities.
Solution:
- Mark the strings to replace in a different way:
It is fine *[thanks]{a word that expresses gratitude}*!
- Initiate Bootstrap and функция всплывающей подсказки .
- Захватить все абзацы
var p = document.getElementsByTagName('p')
Применить REGEX
tooltip = original.match(/(\{)(.*?)(\})/gi)[0].slice(1, -1);
hint = original.match(/(\[)(.*?)(\])/gi)[0].slice(1, -1);
Изменить их внутренний текст
replaced = original.replace(/(\*)(.*?)(\*)/gi,
`<mark data-toggle="tooltip" data-placement="top" title="${tooltip}">${hint}</mark>`);
elem.innerHTML = replaced;
Все вместе в одной функции:
[].forEach.call(p, elem => {
let original = elem.innerHTML;
let replaced, tooltip, hint
tooltip = original.match(/(\{)(.*?)(\})/gi)[0].slice(1, -1);
hint = original.match(/(\[)(.*?)(\])/gi)[0].slice(1, -1);
replaced = original.replace(/(\*)(.*?)(\*)/gi,
`<mark data-toggle="tooltip" data-placement="top" title="${tooltip}">${hint}</mark>`);
elem.innerHTML = replaced;
});
но я не могу
Жалко, когда абзацев больше, или когда я просто хочу сделать это простым способом с двумя парами скобок вместо дополнительной звездочки. Не работает также, когда в innerTEXT есть больше фраз / слов, которые должны иметь всплывающую подсказку. Любые идеи? Есть ли у вас какие-либо предложения? Существующие способы сделать это? Библиотеки? Скрипты?