I have this HTML code (it is located in contenteditable="true"
block):
<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>
User has selected some text in this list:
span
tag).The main difference between words «Chrome» and «Explorer» is that word «Explorer» is wrapped with span
tag, but «Chrome» is not.
So, how do I know if selected text wrapped with some HTML tags or not?
commonAncestorContainer.parentNode
? — If I have selected word «Chrome», my parentNode
will be li
tag (but li
tag doesn't wrap my selected word directly, I don't want set styles for li
tag). So, I cannot use commonAncestorContainer.parentNode
'cos it is useless for me.Actually, I just want to set some CSS styles for the selected text:
style="font-weight:bold;"
for the span
tag; if user has selected Apple Safari 3+
I want to add CSS rules for li
tag)UPD:
Look, when I select some text and then run document.execCommand('Bold', false, null)
, browser wraps my selection with b
tags. When I select exactly the same text again and run the same document.execCommand('Bold', false, null)
command, boldness disappear. So, browser somehow knows that my selection is wrapped with b
tags and remove them (unwrap). So, how does browser know, is selection wrapped with tags or not? If browser knows, why it is so hard to make it with JS?
This is a slightly complex area:
Here are two suggestions:
document.execCommand("bold", false, null)
style
properties/attributes, you could use the CSS class applier module of my Rangy library.