Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery remove object from object collection

Tags:

jquery

object

I have the following example code, creating a object collection.

How can I remove one of the objects? (e.g. $TestList would look as though the "delete me" item was never there. I've tried .remove, .splice, .delete etc but I'm told it's not a function.

Doing typeof($TestList) brings back object, and typeof($TestList[0]) also seems valid.

Surely I don't have to recreate the collection without one item?

(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(
{
})
});

We're using jQuery 1.3.

Thanks!

like image 413
Richard Whitehouse Avatar asked May 16 '13 12:05

Richard Whitehouse


2 Answers

Review

First of all, it's very non-obvious what your code is supposed to do, but here are some issues:

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

You define jQuery.QuickTest.$TestList, but inside build() you declare a global object $TestList.

Functions declared under jQuery.fn are supposed to act on a matched set of elements (referenced by this) and return it as well; your function does neither.

Answers

An answer to some of your questions:

  1. .remove() is a jQuery function that removes nodes from the DOM and needs to be called on a jQuery object.

  2. .splice() only applies to Array and even though you're accessing $TestList as if it were one, it's still just an Object.

  3. .delete() is not any function I know ;-)

Possible solution

To delete an entry from $TestList you could use the delete in this fashion:

delete $TestList[1];
like image 100
Ja͢ck Avatar answered Sep 22 '22 09:09

Ja͢ck


use delete myObject, not myObject.delete

like image 20
Michiel Avatar answered Sep 24 '22 09:09

Michiel