質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2419閲覧

配列:子要素からchildrenのindex番号を取得したい

kittycut

総合スコア9

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/04/20 02:50

編集2020/04/20 03:17

配列で欲しい値を取得するのに困っています。

sceneという親オブジェクトにplane1_1というnameを持つ子オブジェクトをいれています。
sceneの中身は以下のようになっています。
イメージ説明

上の画像では10となっていますが、状況によりその番号は変化してしまいます。
また、上の10以外の0〜9にもそれぞれnameがあります。
実現したいことは、このchildrenの中の全てのnameから'plane1_1'があるインデックスを選び、その番号を返す、というようなものです(つまり、緑枠の値から青枠の数字を取得したいです)。

これが現在のコードです↓
if(num<2){//numが2までならば// num++; var plane1_1=new THREE.Mesh(p2_geometry,p2_material);//THREEjsです// scene.add(plane1_1);//ここで追加// }else if(list.indexOf('1')>= 0){//再度同じ場所を押下した時にその要素があれば// num--; scene.remove(?????)//ここで削除したいです// }
この?????となっている部分にplane1_1があるscene.children[]を入れ、削除したいのです。
なので、そのchildrenのインデックス番号を求める手段をお聞きしたいです。

Arrayのfind,indexOf,some()なども試してみたのですが、思うような結果にならず困っています。
~~jqueryも使用可能です。
~~

初歩的な質問で申し訳ないのですがよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

THREEjsを使用しているためか、階層表記を混乱させてしまい、失礼しました。
スマートとは言えませんが、こちらで解決することができました。

var a=[]; scene.children.forEach(function (element){ var ind=[element.name,scene.children.indexOf(element)]; if(ind[0]==='plane1_1'){a=[];a.push(ind[1])} }); scene.remove(scene.children[a]);

投稿2020/04/20 04:59

kittycut

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

仕様がいまいちわかりにくいのですが、こんな感じですか?

投稿2020/04/20 03:03

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/04/20 03:03

<script> window.addEventListener('DOMContentLoaded', ()=>{ var idx=[...document.querySelectorAll('#hoge div')].indexOf(document.querySelector('#fuga')); console.log(idx); }); </script> <div id="hoge"> <div>1</div> <div>2</div> <div>3</div> <div id="fuga">4</div> <div>5</div> </div>
kittycut

2020/04/20 03:15

ありがとうございます。 さっそく↓のように試させていただきました。 var idx=[...document.querySelectorAll('scene.children name')].indexOf(document.querySelector('plane1_1')); 結果は-1でした。 document.querySelectorAllがうまく取得できていないようで、 console.log(document.querySelectorAll('scene.children name'))でもNodeList[]が返ってきました。 $なしでもできますでしょうか? 質問文の「jqueryも使用可能です」自体が間違っていたようです、すみません。
yambejp

2020/04/20 03:19 編集

> 'scene.children name' ちょっと意味不明です hildrenクラスのついたsceneタグのnameタグ要素から plane1_1タグのインデックスを調べているのですか? id、クラス、name要素の参照の仕方をよくよく考えて書いてください (命題にhtmlもないのでアドバイスもできません)
kittycut

2020/04/20 03:35

「childrenクラスのついたsceneタグ」ではなく、sceneタグのchildrenタグです。 そのchildrenタグにnameタグがあり、そのnameがplane1_となっているchildrenのインデックスを調べています。 scene |_children       |_0・・・ |_10←この数字を取得したいです。数字は0〜11くらいまでです。 |_name |_plane1_1 0〜11までの全てのnameから検索しようと上記のように書いたのですが・・・
yambejp

2020/04/20 03:38

> sceneタグのchildren なら、「scene children」です > nameタグがあり、そのnameがplane1_ nameタグに別途name属性があるということでしょうか? ちょっと質問内容がいい加減すぎて何を答えていいかわかりません
kittycut

2020/04/20 03:42

わかりにくくてすみません、name属性にplane1_1です。 var idx=[...document.querySelectorAll('scene children name')].indexOf(document.querySelector('plane1_1')); これでも結果は-1でした。
yambejp

2020/04/20 03:43

childrenタグのname属性なのですか?nameタグのname属性なのですか?
yambejp

2020/04/20 03:48

エスパー回答 <script> window.addEventListener('DOMContentLoaded', ()=>{ var idx=[...document.querySelectorAll('scene children')].indexOf(document.querySelector('[name=plane1_4]')); console.log(idx); }); </script> <scene> <children name="plane1_1">1</children> <children name="plane1_2">2</children> <children name="plane1_3">3</children> <children name="plane1_4">4</children> <children name="plane1_5">5</children> </scene>
kittycut

2020/04/20 03:50

childrenタグのname属性です。
yambejp

2020/04/20 03:54

埒が明かなそうなのでエスパー回答つけてあります
kittycut

2020/04/20 05:02

エスパー回答を解決のヒントとさせていただきました。 わかりにくい文面にお付き合いいただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問