这是我的代码:
function moremagic()
{
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;
if(txt=="" || txt==" "){
alert("No Text Selected");
return;}
var start = txt.anchorOffset;
var countstring = txt.toString();
alert(txt.anchorNode);
var end = txt.anchorOffset+countstring.length;
var type = prompt("Annotation Type: ");
if(type=="lp-token"){
var description = prompt("Lisp Statement: ");}
else if(type=="section-head-annotation"){
var description = "Section Head";}
else if(type=="list-item-annotation"){
var description = "list-element";}
else if(type=="sentence-annotation"){}
else {var description = prompt("Description: ");}
Arraystring = Arraystring+"#"+type+"#"+description+"#"+start+"#"+end;
alert(Arraystring);
var custom = document.getElementById("custom");
custom.value=Arraystring;
}
它从光标突出显示的文本生成一个textnode对象,但是这个函数被调用很多次,而对于每个不同的高亮显示,anchorNode都会改变。我需要使用anchorNode作为所有已创建的textnode对象的常量。有没有什么方法可以改变textobject的anchorNode?谢谢!
答案 0 :(得分:0)
不完全确定你想要实现的目标,但在阅读这个http://help.dottoro.com/ljkstboe.php时,我不得不说“不,没有办法让anchorNode保持不变”,因为它基于选择。现在,如果您总是希望在特定选择中引用所选字符串中的第一个字符(假设选择只是textNode),那么您可以执行此操作(替换{ {1}}是):
var start
这是因为如果从右到左而不是从左到右进行选择,大多数浏览器将anchorNode放在最后一个字符而将focusNode放在选择的第一个字符处,因为anchorNode指示where用户开始了他们的选择。