У меня есть этот HTML-код (он находится в блоке contenteditable="true"
):
<ol>
<li>Mozilla Firefox 1.5+</li>
<li>Internet <span>Explorer</span> 6+</li>
<li>Opera 9.6+</li>
<li>Google Chrome 2+</li>
<li>Apple Safari 3+</li>
</ol>
Пользователь выбрал текст в этом списке:
- точно слово «Chrome»,
- или точно слово «Проводник» (оно обернуто тегом
span
).
Основное различие между словами «Chrome» и «Explorer» заключается в том, что слово «Explorer» заключено в тег span
, а «Chrome» - нет.
Итак, как я узнаю, обтянут ли выделенный текст некоторыми HTML-тегами или нет?
- С некоторым регулярным выражением? - Я не знаю, как получить выделенный текст с тегами HTML (я знаю только, как получить простой текст из выделения).
- С диапазоном обнаружения
commonAncestorContainer.parentNode
? - Если я выбрал слово «Chrome», мой parentNode
будет тегом li
(но тег li
не переносит выбранное слово напрямую, я не хочу устанавливать стили для тега li
). Поэтому я не могу использовать commonAncestorContainer.parentNode
, потому что это бесполезно для меня.
На самом деле, я просто хочу установить несколько стилей CSS для выделенного текста:
- если выбранный пользователем текст уже непосредственно обернут каким-либо тегом HTML, я хочу добавить правила CSS для этого тега (например, если пользователь выбрал слово «Explorer», я хочу добавить
style="font-weight:bold;"
для тега span
; если пользователь выбрал Apple Safari 3+
Я хочу добавить правила CSS для тега li
)
- если выбранный пользователем текст является простым текстом (напрямую не обернутым некоторыми тегами, например словом «Chrome»), я хочу обернуть этот текст некоторыми тегами и добавить некоторые правила CSS. (С этим предметом у меня проблем нет, я знаю как это сделать.)
UPD:
Посмотрите, когда я выбираю какой-то текст и затем запускаю document.execCommand('Bold', false, null)
, браузер оборачивает мой выбор тегами b
. Когда я снова выбираю тот же текст и запускаю ту же команду document.execCommand('Bold', false, null)
, смелость исчезает. Итак, браузер почему-то знает, что мой выбор обернут тегами b
и удаляет их (развернуть). Итак, как браузер узнает, выборка обернута тегами или нет? Если браузер знает, почему это так сложно сделать с помощью JS?