Javascript:如何通过一个字符有条件地扩展选择

时间:2014-06-05 10:53:58

标签: javascript range selection

我是一名客观的C程序员,他需要在过去两周内快速了解Javascript,以了解我正在制作的新应用程序。有一些我无法弄清楚的东西,所以我决定在这里询问一下。

这一次,这是我的问题:

如果我有一个单词的选择,我该如何检查单词之前的字符是否是双引号(引号),如果是,则扩展选择以包含它们?

其他相关要点(由于该计划的其余部分):

  • 只有在focusNode与anchorNode
  • 相同时才需要这样做
  • 选择可以向前或向后进行
  • 我不希望选择更改,除非有双引号
  • 它实际上只需要在选择之前检查双引号,但也许我可以扩展它在选择后对双引号的行为方式相同
  • 不要忽略空格
  • javascript not jquery

这是我尝试的,这似乎是我应该做的事情,但由于我缺乏Javascript的经验,它不起作用(我为愚蠢的错误和无知的使用道歉错误的事情):

    var selection       = window.getSelection();
    var focusNode       = selection.focusNode;
    var focusOffset     = selection.focusOffset;
    var anchorNode      = selection.anchorNode;
    var anchorOffset    = selection.anchorOffset;

    if (anchorNode === focusNode ) {
    var quoteRange = document.createRange();
    var quoteString = "";

    if ((focusOffset > anchorOffset) && anchorOffset > 0){ //selection is forwards
       quoteRange.setStart(anchorNode, anchorOffset);
        quoteRange.setEnd(anchorNode, anchorOffset - 1);
        quoteString = quoteRange.toString();
    } else if ((focusOffset < anchorOffset) && focusOffset > 0){ //selection is backwards
       quoteRange.setStart(focusNode, focusOffset);
        quoteRange.setEnd(focusNode, focusOffset - 1);
        quoteString = quoteRange.toString();
     }

    console.log(quoteString);

    if (quoteString ===  "\"") {
       selection.modify("extend", "backward", "character");
    }

}

我觉得有些事情对于比我更有经验的人来说应该是显而易见的,我做错了。

在我的版本中,&#34; quoteString&#34; <据我所知,它不应该是空的。

1 个答案:

答案 0 :(得分:0)

哇噢!我得到了它的工作。问题似乎是我创造的范围是负面的。当我交换setEnd和setStart时,一切都按预期工作。 :)

if (anchorNode === focusNode ) {
    var quoteRange = document.createRange();
    var quoteString = "";
    if ((focusOffset > anchorOffset) && anchorOffset > 0){ //selection is forwards
       quoteRange.setEnd(anchorNode, anchorOffset);
        quoteRange.setStart(anchorNode, anchorOffset - 1);
        quoteString = quoteRange.toString();
            } else if ((focusOffset < anchorOffset) && focusOffset > 0){ //selection is backwards
       quoteRange.setEnd(focusNode, focusOffset);
        quoteRange.setStart(focusNode, focusOffset - 1);
        quoteString = quoteRange.toString();
                }
    console.log(quoteString);

   if (quoteString ===  "\"") {
       selection.modify("extend", "backward", "character");