Skip to main content
Inspiring
August 1, 2013
Answered

Deleting all empty layers except for one?

  • August 1, 2013
  • 2 replies
  • 1173 views

Hello,

This script deletes all empty/blank layers. I need it to delete all empty/blank layers except for the layer that is named "Grid".

I've tried searching the forum for clues but I'm stumped. Any help would be greatly appreciated.

Thank you much.

var myLayers = app.activeDocument.layers.everyItem().getElements();

for(var i=myLayers.length-1;i>=0;i--){

if(myLayers.pageItems.length==0){

myLayers.remove();

continue;

}

}

This topic has been closed for replies.
Correct answer Kasyan Servetsky

This works for me:

Main();

function Main() {

    var i,

    myLayers = app.activeDocument.layers.everyItem().getElements();

   

    for (var i = myLayers.length-1; i >=0; i--) {

        if(myLayers.pageItems.length == 0) {

            if (myLayers.name != "Grid") myLayers.remove();

        }

    }

}

You don't need "continue" here.

2 replies

Community Expert
August 1, 2013

@tlumbis – how do you define "empty page"?
Do you consider objects on applied master pages?

Uwe

tlumbisAuthor
Inspiring
August 1, 2013

The script, as it is, removes all layers which have no items placed on them. The layer named "Grid" has no items placed on it, but has a number of rulers which we use as guides for placement. So we want the script to delete all other empty/blank layers but leave the "Grid" layer.

Kasyan Servetsky
Legend
August 1, 2013

if (myLayers.name != "Grid") myLayers.remove();

tlumbisAuthor
Inspiring
August 1, 2013

@Kasyan - I wasn't able to make that work.

If I just drop it into the existing script, before the first "if" statement, it causes some sort of conflict with the next "if" statement.

If I replace the existing "if" statement then it removes every layer except for the layer named "Grid" and I want it to remove only the blank/empty layers.

It's a safe bet that I'm doing something wrong...

Thanks for your help.

Kasyan Servetsky
Kasyan ServetskyCorrect answer
Legend
August 1, 2013

This works for me:

Main();

function Main() {

    var i,

    myLayers = app.activeDocument.layers.everyItem().getElements();

   

    for (var i = myLayers.length-1; i >=0; i--) {

        if(myLayers.pageItems.length == 0) {

            if (myLayers.name != "Grid") myLayers.remove();

        }

    }

}

You don't need "continue" here.