2012-12-07 77 views
0

假设我的HTML看起来像这样HTML - 如何获得与亲人选择偏移到HTML标签

<div> 
    <p> start<span>span</span>end </p> 
</div> 

我需要能够得到补偿的时候做出选择,而不忽略span标签。

例如 假设用户选择

t<span>span</span>e 

我希望拿到4作为起始偏移和24作为结束偏移。 通过window.getSelection()获得的选择对象返回1,8,这对我来说是无用的。 我显然需要,用户可以选择只内宽度,或跨度的一部分等

感谢

+0

[link](http://stackoverflow.com/questions/7007357/jquery-get-selections-paragraph-length-etc)[jsfiddle](http://jsfiddle.net/wP8w9/2/) – Morpheus

+0

I我已经尝试过摆弄这个例子,但我无法弄清楚如何得到实际的偏移... – Gal

+0

对不起,我的坏...我会看看,然后我回家。 – Morpheus

回答

1

我已经结束了正是如此解决它来处理所有情况:

  var range = sel.getRangeAt(0); 
      // inserts two spans at the beginning and end of the range, to 
      // calculate the offsets 
      var div = document.createElement("span"); 
      div.setAttribute("class", START_NODE); 
      range.insertNode(div); 
      range.collapse(false); 
      div = document.createElement("span"); 
      div.setAttribute("class", END_NODE); 
      range.insertNode(div); 
      // gets the offsets by looking up the location of the inserted spans 
      // removes them after finding the offsets (also so the starting 
      // offset won't screw up the ending offset) 
      comment.startOffset = p.html().indexOf('<span class="' + START_NODE + '">'); 
      $("." + START_NODE).remove(); 
      comment.endOffset = p.html().indexOf('<span class="' + END_NODE + '">'); 
      $("." + END_NODE).remove(); 
      p.html(p.html()); 

基本上,我在范围选择开始时添加了一个SPAN,然后折叠范围并在其末尾添加一个SPAN。 然后我只搜索我添加的第一个跨度的索引,以及我添加的第二个跨度的索引以找到偏移量。