jQuery从对象集合中删除对象

6
我有一段创建对象集合的示例代码,现在想要移除其中的一个对象(比如说“delete me”),让$TestList看起来就像它从未存在过一样。我尝试了.remove、.splice、.delete等方法,但都提示这不是一个函数。
使用typeof($TestList)可以返回对象,而typeof($TestList[0])似乎也是有效的。
难道我真的需要重新创建一个不包含特定项的集合吗?
(function($) { 

jQuery.QuickTest = {
    $TestList: {},
    build: function()
    {
        $TestList={};
        $TestList[0] = 
        {
            title: "part 1"
        };

        $TestList[1] = 
        {
            title: "delete me please"
        };

        $TestList[2] = 
        {
            title: "part 2"
        };

    }
}

jQuery.fn.QuickTest = jQuery.QuickTest.build;   

})(jQuery);

$(document).ready(function() {

$().QuickTest(
{
})
});

我们正在使用jQuery 1.3。
谢谢!

“$()”不是从1.4版本开始才被支持的吗?除此之外,您能和我们分享一下这段代码的作用吗? - Ja͢ck
顺便提一下,$TestList 是隐含全局的,这是一个不好的做法。 - Ja͢ck
@Jack:在1.4版本之前,$()会返回一个包含document元素的jQuery对象。 - Matt
@Matt 啊...那么,这段代码就更难理解了;-) - Ja͢ck
2个回答

10

评论

首先,你的代码的目的非常不明显,但是这里有一些问题:

jQuery.QuickTest = {
    $TestList: {},
    build: function()
    {
        $TestList={};

您定义了jQuery.QuickTest.$TestList,但在build()内部声明了一个全局对象$TestList

jQuery.fn下声明的函数应该作用于一组匹配的元素(由this引用)并将其作为返回值; 但是您的函数都没有做到。

答案

对于您的一些问题的回答:

  1. .remove()是一个从DOM中删除节点的jQuery函数,需要在jQuery对象上调用。

  2. .splice()仅适用于Array,即使您像访问数组一样访问$TestList,它仍然只是Object

  3. .delete()不是我知道的任何函数;-)

可能的解决方案

要从$TestList中删除条目,可以使用以下方式中的delete

delete $TestList[1];

非常感谢!这是我代码的完全简化版本,只包含绝对基础部分,所以有些开放,对此很抱歉。但是你的解释给了我很多可以研究的东西,非常感谢!现在很难找到你想做的事情,尤其是当你不知道要使用哪些词汇时。这是我让一个对象可用于所有其他函数而不必到处传递它的方法。而删除正是我需要的。 :-) - Richard Whitehouse

7

使用 delete myObject,而不是 myObject.delete


顺便提一句,这只是JavaScript,不需要jQuery也能运行。 - Michiel
不会完全删除对象,而是将其保留为 null - Fizzix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接