Skip to main content
Inspiring
June 13, 2022
Answered

【JavaScript】取得したレイヤーを次のドキュメントでも使いたい

  • June 13, 2022
  • 2 replies
  • 1234 views

お世話になっています。

 

例えば選択しているアイテムがあるレイヤーを取得して、それを次のドキュメントでも使用することは可能なのでしょうか。

 

var doc = app.documents ;//開かれているドキュメント

var sel = app.activeDocument.selection[0] ;//選択しているアイテム
var par = sel.parent ; //選択アイテムのレイヤー

app.activeDocument = doc[1]; //次のドキュメントに移動
doc.activeLayer = app.activeDocument.layers[par.name] ; //parという名前のレイヤーをアクティブにする

/*
parという名前のレイヤー内のオブジェクトを選択
for(i=0;i<layers[par.name].pageItems.length;i++){
    layers[par.name].pageItems[i].selected = true;
}
*/

 

次のドキュメントでやることは、単純にアクティブにするとかそのレイヤー内のオブジェクトを全選択するとかです。

 

上記のコードではアクティブにすることもレイヤー内のオブジェクトを選択することもできませんでした。

This topic has been closed for replies.
Correct answer Ten A

単純な話、配列の引数は連想配列ではないので名前で引っ張ってくるにはgetByNameしないとだめです。ajabonさんの4つ目のところが正解かと思います。(正確なことを言うと「変数parに入っているレイヤーの名前」ですね)

2 replies

Ten A
Community Expert
Ten ACommunity ExpertCorrect answer
Community Expert
June 13, 2022

単純な話、配列の引数は連想配列ではないので名前で引っ張ってくるにはgetByNameしないとだめです。ajabonさんの4つ目のところが正解かと思います。(正確なことを言うと「変数parに入っているレイヤーの名前」ですね)

nekkonekoAuthor
Inspiring
June 13, 2022

ありがとうございます。

 

ちゃんと理解してから書かないとダメですね・・・

ご指摘ありがとうございます!

ajabon grinsmith
Community Expert
Community Expert
June 13, 2022

コードにコメントがついて頭に入ってきやすくなりましたー。

 

最小限ですけど気になった点いくつかだけ。

var par = sel.parent ; //選択アイテムのレイヤー

 ↓ 書いた本人以外が使う場合をふまえると、parentがいつでもレイヤーオブジェクトとは限らない(グループの子オブジェクトだったり)のと、それ用のプロパティがあります。

var par = sel.layer ; //選択アイテムのレイヤー

 

doc.activeLayer = app.activeDocument.layers[par.name] ; //parという名前のレイヤーをアクティブにする

 これも見たかんじ動いてもよさそうなのですが、動かなかったのであれば、それ用のメソッドがあるので紹介しておきます。

doc.activeLayer = app.activeDocument.layers.getByName(par.name); //parという名前のレイヤーをアクティブにする

 

実際試してないんですが(試せよ)、もしこれで動かなかった場合は、

アクティブドキュメント切り替えの前に変数 par にレイヤーではなくレイヤー名(String)を入れてしまったほうがいいと思います。

nekkonekoAuthor
Inspiring
June 13, 2022

ありがとうございます。

 

いろいろ試したんですけど出来なくて、頭の中が???だらけだったんですが、

 

doc.activeLayer = app.activeDocument.layers[par.name] ; //parという名前のレイヤーをアクティブにする

 

そもそもこの部分で、doc.activeLayerにしてるのが出来ない原因でした。

 

app.activeDocument.activeLayer = app.activeDocument.layers[par.name] ; 

 

最初のコードでもこれに直したらちゃんと動きました(汗)

プロパティやメソッドを教えていただいたので、それを活用してまた書いてみたいと思います。

ありがとうございました!

ajabon grinsmith
Community Expert
Community Expert
June 13, 2022

ぎゃーすみません式の前半見落としてました!

やっぱり試さないとだめですね勉強になりましたw