Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改字符串时跟踪位置的替代方法_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 更改字符串时跟踪位置的替代方法

Javascript 更改字符串时跟踪位置的替代方法,javascript,jquery,arrays,Javascript,Jquery,Arrays,目前,我正在使用一个数组来跟踪标记到字符串中不同插入符号位置的唯一键。数组的键是位置,值是唯一键 Sample Array [4] => RED [8] => BLUE [12] => ORANGE 示例字符串: 那只红狗在嚎叫 每次编辑字符串时,都会显示更改点移动后出现的插入符号位置。(即:如果我将字符串更改为“一只红狗在嚎叫”,我的脚本将从每个键中减去2,以将插入符号位置重新定位到修改后的字符串 在慢速编辑或短字符串中,这很好,但是较慢的浏览器通常会在较

目前,我正在使用一个数组来跟踪标记到字符串中不同插入符号位置的唯一键。数组的键是位置,值是唯一键

Sample Array

[4]  =>   RED
[8]  =>   BLUE
[12] =>   ORANGE
示例字符串:

那只红狗在嚎叫

每次编辑字符串时,都会显示更改点移动后出现的插入符号位置。(即:如果我将字符串更改为“一只红狗在嚎叫”,我的脚本将从每个键中减去2,以将插入符号位置重新定位到修改后的字符串

在慢速编辑或短字符串中,这很好,但是较慢的浏览器通常会在较长字符串上混淆键位置,因为更新每个键(50-100个键)所需的时间太长

这是我的psuedo脚本:

textLength = 22; // SET FROM INIT

$('#text').onkeyup(function(){

    currentPosition = getCaretPosition(); // Returns caret position
    newArray = [];
    movePos = (document.getElementById('text').length - textLength);

    for(var i=0; i<sampleArray.length; i++){
        if(i >= currentPosition){
            newArray[i+movePos] = sampleArray[i];
        }else{
            newArray[i] = sampleArray[i];
        }
    }
    sampleArray = newArray;

    textLength = document.getElementById('text').length;

});
textLength=22;//从INIT设置
$('#text').onkeyup(函数(){
currentPosition=getCaretPosition();//返回插入符号位置
newArray=[];
movePos=(document.getElementById('text').length-textLength);
对于(变量i=0;i=currentPosition){
newArray[i+movePos]=sampleArray[i];
}否则{
newArray[i]=sampleArray[i];
}
}
sampleArray=newArray;
textLength=document.getElementById('text').length;
});
我意识到,问“有没有更好的方法可以做到这一点”可能是相当主观的,但是让我重新表述一下,通过问“还有什么其他方法可以根据对初始字符串的更改来完成相同的键重新索引,这可能更有效”


需要明确的是,期望的行为是始终让sampleArray键跟踪字符串中相对于它们所标记的单词的初始位置,即使在前面或后面添加了其他单词。在我给出的示例中,第一个键附加在单词“red”之前,第二个键附加在单词“dog”之前,第三个键附加在单词“howling”之前。

如果较慢的浏览器不能正常工作,那么这不是一个“有没有更好的方法来做这个”的问题,这是一个非常合理的“我的代码没有按预期工作”问题。也就是说,我对预期的行为还不清楚。我对预期的行为做了更多的解释。这有帮助吗?你所有的话都是独一无二的吗?如果我将“红狗在嚎叫”编辑为“红狗在嚎叫”,预期的行为是什么?不,不是唯一的。此外,数组不能标记到单词,因为单词可以更改。实际位置是它们需要标记到的位置。如果这是一个所见即所得编辑器,可能更好地考虑这一点,插入符号位置将表示起始标记。如果我要制作“dog”蓝色,则起始标记位置将是示例数组中的第二个键。可以编辑Dog,以及更改之前的内容。最后,键位置将移动到“Dog”开始格式化的新位置。您正在将
i
(0-2)与
currentPosition
(假定为0-stringlength)进行比较-对吗?