我希望使用Mozilla的javascript风格提供的Range对象取回我在元素中选择的文本。
所以我这样做:
//assume that I'm only using Firefox, and there is just one selection
var range = window.getSelection().getRangeAt(0);
var rangeText = range.toString();
当所选文本的html没有任何换行符时,这可以正常工作换句话说,如果我有以下html:
<div>One. Two. Three. Four. Five.</div>
我选择两个。三。四。,然后一切都很好。
另一方面,如果我有
<div>
One.
Two.
Three.
Four.
Five.
</div>
我选择两个。三。四。和以前一样,在Range.toString()返回的结果中引入了换行符;换行符在两个。,三个。和四个。
之后。显然,当在浏览器中显示时,两个html片段都是相同的。有没有办法可以确保在没有换行符的情况下返回相同的文本?
答案 0 :(得分:1)
这应该这样做:
range.toString().replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '')
答案 1 :(得分:0)
好的,我最后使用了Tim Down的部分答案:
var sel = window.getSelection();
var range = sel.getRangeAt(0);
var range2 = range.cloneRange();
//do some stuff with range2...
var rangeText, range2Text;
sel.removeAllRanges();
sel.addRange(range);
rangeText = sel.toString();
sel.removeAllRanges();
sel.addRange(range2);
range2Text = sel.toString();