2015-08-05 2 views
0

Je ne sais pas exactement comment exprimer la syntaxe pour cela. En fin de compte, je veux supprimer tous les chemins dans un document qui n'ont pas le nom Ex1 ou Ex2 ou Ex3.Suppression de tous les chemins! = String1 ou String2

C'est ce que j'ai jusqu'à présent

deletepaths(); 

function deletepaths() { 
    if (!documents.length) return; 
    var doc = activeDocument; 
    for (var a = doc.pathItems.length - 1; a > -1; a--) { 
     if (doc.pathItems[a].name == "Ex1") { 
      return true; 
     } 
     if 
     else(doc.pathItems[a].name == "Ex2") { 
      return true; 
     } else doc.pathItems[a].remove(); 
    } 
} 

Voici un autre script que j'utilisais avant qui fonctionne, mais ne me permet pas à exclure Effectuer plusieurs noms « chemin »

#target Photoshop 
 
main(); 
 
function main(){ 
 
if(!documents.length) return; 
 
var doc = activeDocument; 
 
for(var a = doc.pathItems.length-1;a>-1;a--){ 
 
if(doc.pathItems[a].name != "Ex1") doc.pathItems[a].remove(); 
 
    } 
 
}

Répondre

0

Cela devrait le faire:

function deletepaths() { 
 
    if (!documents.length) return; 
 
    var doc = activeDocument; 
 
    for (var a = doc.pathItems.length - 1; a > -1; a--) { 
 
     if (!doc.pathItems[a].name.match(/^Ex[1-3]$/)) { 
 
      doc.pathItems.splice(a,1); 
 
     } 
 
    } 
 
} 
 

 
//Testing 
 
var documents = [{}, {}], 
 
    activeDocument = {"pathItems": [{name: "Ex1"}, {name: "Ex2"}, {name: "Someothername"}, {name: "Exasd1"}, {name: "asdEx1"}, {name: "Ex2"}, {name: "Ex3"}, {name: "Ex2"}, {name: "Exasd1"}, {name: "Exasd1"}, ]}; 
 
deletepaths(); 
 
            
 
var body = document.getElementsByTagName("body")[0]; 
 
activeDocument.pathItems.forEach(function(a,b,c){ 
 
    body.innerHTML += a.name + "<br>";  
 
});

+0

pouvez-vous le décomposer un peu pour moi? Je ne suis pas tout à fait sûr de savoir comment modifier cela afin qu'il fonctionne comme un script photoshop – unclecanny

0

Parfois, le formatage de votre code d'une manière plus lisible peut aider à diagnostiquer le problème. Cette fonction aborde le problème d'une manière légèrement différente - nous conservons un tableau de noms que nous voulons sauvegarder, et si le nom du chemin ne se trouve pas dans ce tableau, nous l'appelons .remove().

Je suis aussi un retour boolean (dans le cas où l'élément lié à votre variable documents n'existe pas) pour que la fonction nourrit quelque chose d'utile à vous, au lieu de retourner undefined.

Je ne connais pas la bibliothèque que vous utilisez, mais essayez-la. Je suis heureux de travailler avec vous pour trouver une solution, laissez simplement un commentaire sur cette réponse.

Utilisez cette fonction:

function deletepaths() 
{ 
    if (!documents.length) return false; 

    var doc = activeDocument; 
    var save = ["Ex1", "Ex2", "Ex3"]; 

    for (var x = 0; x < doc.pathItems.length; x++) 
    { 
    if (save.indexOf(doc.pathItems[x].name) == -1) 
    { 
     doc.pathItems[x].remove(); 
    } 
    } 
} 

Exemple de travail:

http://codepen.io/bddenhartog/pen/VLReKa
Notez que le code dans le stylo a été modifié pour accueillir l'exemple.

+0

hmm, ne semble pas fonctionner. Ceci est la documentation de la bibliothèque: http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/photoshop/pdfs/photoshop_scriptref_js.pdf – unclecanny

+0

J'ai ajouté un autre commentaire au message original – unclecanny

+0

J'ai mis à jour ma réponse. Si cela fonctionne pour vous, s'il vous plaît n'oubliez pas de marquer comme la réponse pour les futurs lecteurs. Si cela ne fonctionne pas pour vous, faites-moi savoir quel type de sortie vous obtenez. – Ben