使用JavaScript push方法添加新元素有效,但所有元素都具有最后添加元素的值

时间:2013-02-24 09:41:10

标签: javascript arrays

我正在使用push方法将新值添加到现有数组(st [])。添加新值有效,但数组中的所有值都将获取最后添加的元素的值。

if(!window.WordCatcher){
    WordCatcher = {};
}

WordCatcher.selector = {};

WordCatcher.selector.getSelected = function(){
    var t = '';
        if(window.getSelection) {t = window.getSelection();}
        else if(document.getSelection) {t = document.getSelection();}
        else if(document.selection) {t = document.selection.createRange().text;}
    return t;
}


st = new Array();

WordCatcher.selector.dblclick = function() {
    st.push(WordCatcher.selector.getSelected());
    console.log(st);
}

使用以下命令在jQuery中调用该函数:

$(document).bind("dblclick", WordCatcher.selector.dblclick);

示例:如果我先双击“Die”,第二次“Smart”,第三次“TV”,我将在firebug中获得以下日志:

[Die { constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}] [Smart {constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}, Smart {constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}] [TV { constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}, TV {constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}, TV {constructor=Selection,  focusNode=textNode,  anchorNode=textNode,  mehr...}]

也许有人知道我在做什么。

祝你好运, 安迪

2 个答案:

答案 0 :(得分:1)

我认为你推动了对“t”的引用。

每次更改时 - 所有数组元素都在变化,因为它们都引用了相同的参数=> “T”。

问题可能出在你的函数中:WordCatcher.selector.getSelected

尝试更改它以返回其他内容,然后再次检查。

答案 1 :(得分:0)

内部窗口的选择对象是一种单例,即每次getSelection()调用都返回对同一对象的相同引用。因此,您必须手动获取所需的所有数据,或克隆该对象,但不存储即时结果。