2015-08-05 9 views
0

Я не совсем уверен, как сформулировать синтаксис для этого. В конечном итоге я хочу удалить весь путь в документе, который не имеет имени Ex1 или Ex2 или Ex3.Удаление всех путей! = String1 или String2

Это то, что я до сих пор

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

Вот еще один сценарий, я использовал перед, который работает, но не позволяет мне Exlude несколько «путь» имена

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

ответ

0

Это следует сделать это:

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

Можете ли вы сломать это немного для меня? Я не совсем уверен, как это изменить, поэтому он будет работать как скрипт для фотошоп – unclecanny

0

Иногда, форматирования кода в более доступной форме может помочь диагностировать проблему.

Эта функция подходит к проблеме несколько иначе: мы сохраняем массив имен, которые мы хотим сохранить, и если имя пути не находится в этом массиве, тогда мы вызываем на него .remove().

Я также возвращая boolean (в том случае, если элемент связан с вашей documents переменной не существует), так что функция кормит что-то полезное обратно к вам, вместо того, чтобы вернуться undefined.

Я не знаком с библиотекой, которую вы используете, но попробуйте это. Я рад работать с вами, чтобы получить решение, просто оставьте комментарий к этому ответу.

Используйте эту функцию:

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

Рабочий пример:

http://codepen.io/bddenhartog/pen/VLReKa
Обратите внимание, что код в ручке была изменена, чтобы приспособить пример.

+0

hmm, похоже, не работает. Это документация библиотеки: http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/photoshop/pdfs/photoshop_scriptref_js.pdf – unclecanny

+0

Я добавил еще один комментарий к исходному сообщению – unclecanny

+0

Я обновил свой ответ. Если это сработает для вас, не забудьте отметить его как ответ для будущих читателей. Если это не сработает для вас, сообщите мне, какую продукцию вы получаете. – Ben