奇怪的选择行为

时间:2010-10-04 23:58:02

标签: javascript jquery selection range

我的JS代码:


    function getSelectedText(){
      if(window.getSelection){
          select = window.getSelection().getRangeAt(0);
                  var st_span = select.startContainer.parentNode.getAttribute("id").split("_")[1];
                  var end_span = select.endContainer.parentNode.getAttribute("id").split("_")[1];
                  console.log(select.endContainer);
                  var ret_urn=[st_span,end_span];
                  return ret_urn
      }
      else if(document.getSelection){
          return document.getSelection();
      }

    }
    $(document).ready(function() {
      $("div#check_button button").click(function () {
                      var loc = getSelectedText();
                      console.log(loc);
                      });
    });
    

这是我的整个html文件:http://pastebin.com/acdiU623

很难解释,所以我准备了短片:http://www.youtube.com/watch?v=tVk4K70JO80

用几句话说:当我按住鼠标左键并按住它来选择文字/数字并从字母/数字的一半开始选择时,虽然这个字母/数字没有突出显示,但它会被添加到选择中。我必须准确地开始选择。宽字母很好用,但用i,j或l等字母很难。

这是我电影的第二个例子。我按了5号长度的3/4处的左按钮,虽然没有突出显示5,但它被选中。

在FF和Opera上测试过。

2 个答案:

答案 0 :(得分:1)

好的,试过这个演示。它完美无瑕。它甚至适用于Firefox。刚刚测试过的歌剧和野生动物园,它也适用于它们。即使我选择半个字母或数字,它也会返回突出显示的文本,这是您进行选择时所期望的。

在新网页上试用,但仅用于测试目的。然后当它工作并且您对结果感到满意时,然后开始对现有页面进行更改。

它比你的代码简单得多。这是一个跨浏览器脚本,用于获取用户选择的文本

<script language=javascript>
function getSelText()
{
    var txt = '';
     if (window.getSelection)
    {
        txt = window.getSelection();
             }
    else if (document.getSelection)
    {
        txt = document.getSelection();
            }
    else if (document.selection)
    {
        txt = document.selection.createRange().text;
            }
    else return;
document.aform.selectedtext.value =  txt;
}
</script>
<input type="button" value="Get selection" onmousedown="getSelText()"> 
<form name=aform >
<textarea name="selectedtext" rows="5" cols="20"></textarea>
</form>

http://www.codetoad.com/javascript_get_selected_text.asp

希望这有帮助。

<强> PK

答案 1 :(得分:0)

对于与用户看起来相同的选择,有多个不同的边界点。您所看到的可能是以下内容之间的差异,其中|是选择边界:

<span>5</span><span>|6</span><span>7|</span><span>8</span>

<span>5|</span><span>6</span><span>7</span><span>|8</span>

在这两种情况下,在选择上调用toString()会得到相同的结果(“67”)。