Search code examples
dojowidgetdestroy

How do i remove all Dojo widgets with id starts with xyz


I have scrollableViews with a id name like idname1, idname2, idname88 etc. I want to destroy all widgets with a id name starting with "idname".

I have tried this:

var widgets = dijit.findWidgets("id^=divNodes");
dojo.forEach(widgets, function(w) {
w.destroyRecursive(false);

It seems that I cant use dijit.findWidgets("id^=divNodes") for this.

What will work for this?


Solution

  • From the docs...

    registry.findWidgets returns an array of all non-nested widgets inside the given DOM node.

    https://dojotoolkit.org/reference-guide/1.8/dijit/registry.html

    You could iterate over the registry yourself

    require(["dojo/_base/array", "dijit/registry"], function(array, registry){
        var startsWith = function(wholeString, lookFor) {
            return wholeString.slice(0, lookFor.length) == lookFor}
        };
    
        var toDestroy = array.filter(registry.toArray(), 
            function(w) { return startsWith(w.id, 'divNodes'); });
    
        array.forEach(toDestroy, function(w) { w.destroyRecursive(false); });
    });