Вот функция, которая делает это, используя DOM Range
в большинстве браузеров и TextRange
в IE <9. </p>
Живая демоверсия: http://jsfiddle.net/bVpqR/
Код:
function getUnselectedText(containerEl) {
var sel, range, tempRange, before = "", after = "";
if (typeof window.getSelection != "undefined") {
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
} else {
range = document.createRange();
range.collapse(true);
}
tempRange = document.createRange();
tempRange.selectNodeContents(containerEl);
tempRange.setEnd(range.startContainer, range.startOffset);
before = tempRange.toString();
tempRange.selectNodeContents(containerEl);
tempRange.setStart(range.endContainer, range.endOffset);
after = tempRange.toString();
tempRange.detach();
} else if ( (sel = document.selection) && sel.type != "Control") {
range = sel.createRange();
tempRange = document.body.createTextRange();
tempRange.moveToElementText(containerEl);
tempRange.setEndPoint("EndToStart", range);
before = tempRange.text;
tempRange.moveToElementText(containerEl);
tempRange.setEndPoint("StartToEnd", range);
after = tempRange.text;
}
return {
before: before,
after: after
};
}