代码之家  ›  专栏  ›  技术社区  ›  Tola Odejayi

带有range.toString()的奇怪行为

  •  1
  • Tola Odejayi  · 技术社区  · 15 年前

    我想使用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 回复  |  直到 11 年前
        1
  •  1
  •   brianpeiris    15 年前

    应该这样做:

    range.toString().replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '')
    
        2
  •  0
  •   Tola Odejayi    15 年前

    好吧,我最后用了蒂姆的部分回答:

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