我是一名客观的C程序员,他需要在过去两周内快速了解Javascript,以了解我正在制作的新应用程序。有一些我无法弄清楚的东西,所以我决定在这里询问一下。
这一次,这是我的问题:
如果我有一个单词的选择,我该如何检查单词之前的字符是否是双引号(引号),如果是,则扩展选择以包含它们?
其他相关要点(由于该计划的其余部分):
这是我尝试的,这似乎是我应该做的事情,但由于我缺乏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; <据我所知,它不应该是空的。
答案 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");