как один из вариантов написал следующий костыль.
if ((st.firstChild && st.firstChild.nodeType==3 && $.trim(st.firstChild.nodeValue)!='' && st.childNodes.length==1) ||
st.childNodes.length>1 ||
(st.firstChild && st.firstChild.nodeType==1))
- Проверяем на наличие вообще firstChild
- Тип ноды у пробелов будет всегда равен текстовой ноде, т.е. троечке, что разумно вроде как.
- Если мы знаем тип нода, то мы можем обратиться к его свойству nodeValue
- чтобы в наше условие не попадали выделения у которых в начале стоит пробела, а затем идут другие ноды, ограничиваем область вхождения только одноНодовым выделением
- альтернативное условие - если несколько нодов, то текст нам подходит, т.к. пробелы разбиваться на несколько нодов явно не будут (правда, будут пробелы с тэгами, в которых пустоты или пробелы. да)
- альтернативное условие - при типе чайлдНода равного тэгу - всегда пропускаем, думаю, там нет нужды фильтровать.