range.toString()的奇怪行为

时间:2009-10-18 22:35:12

标签: javascript firefox range

我希望使用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片段都是相同的。有没有办法可以确保在没有换行符的情况下返回相同的文本?

2 个答案:

答案 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();