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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Onsen UI

HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

Q&A

解決済

1回答

2344閲覧

removeChildで消したノードが残ってしまうことの解決法について

kj-mimolette

総合スコア4

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Onsen UI

HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

0グッド

0クリップ

投稿2020/02/11 08:39

removeChildで消したノードが残ってしまうことの解決法

現在表計算アプリのようなものを作っています。
今回はremoveChildで削除したノードが画面からは消えるのに、ノードとして残ってしまうことに困り質問させていただきました。
具体的には以下の通りです。

現在の状況

イメージ説明

ここで表示されている真ん中の行を消すと、

イメージ説明

画面上では消えますが、開発者ツールには<ons-list-item class="list-item"></ons-list-item>が残ってしまいます。

開発中のアプリには<ons-list>の要素数を取得する処理があり、このままだと消したはずの<ons-list-item>までカウントされてしまい困っております。

removeChildを使ってノードを完全に消す方法、もしくは別のメソッドを使って完全に消す方法を教えていただけると幸いです。
初めての質問で分かりにくい点もあると思いますが、どうぞよろしくお願いいたします。

###削除ボタンのソースコード

javascript

1deleteRow = function(obj) { 2   //削除したいons-list-itemの取得 3 var listItem = obj.parentNode.parentNode.parentNode; 4 //上記の親要素であるons-listの取得 5 var list = listItem.parentNode; 6 //削除の際に発生する計算 7 var sum = listItem.children[0].children[3].children[0].textContent; 8 var TOTAL = document.getElementById('total'); 9 TOTAL.textContent = Math.round((TOTAL.textContent - sum) * 10) / 10; 10   //削除 11 list.removeChild(listItem); 12 //idの振り直し 13 //それぞれのクラスを持つノードを取得 14 var rowIdArray = document.querySelectorAll('.row'); 15 var amountIdArray = document.querySelectorAll('.amount'); 16 var priceIdArray = document.querySelectorAll('.price'); 17 var useAmountIdArray = document.querySelectorAll('.useAmount'); 18 var sumIdArray = document.querySelectorAll('.sum'); 19 //それぞれのidを順番に振り直す 20 for(var i = 0; i < rowIdArray.length; i++){ 21 rowIdArray[i].setAttribute('id', 'row' + i); 22 } 23 for(var i = 0; i < amountIdArray.length; i++){ 24 amountIdArray[i].setAttribute('id', 'amount' + i); 25 } 26 for(var i = 0; i < priceIdArray.length; i++){ 27 priceIdArray[i].setAttribute('id', 'price' + i); 28 } 29 for(var i = 0; i < useAmountIdArray.length; i++){ 30 useAmountIdArray[i].setAttribute('id', 'useAmount' + i); 31 } 32 for(var i = 0; i < sumIdArray.length; i++){ 33 sumIdArray[i].setAttribute('id', 'sum' + i); 34 } 35 }

補足情報(FW/ツールのバージョンなど)

PC:Mac 0S
開発環境:Monaca、Onsen-UI

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

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

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

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

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

Lhankor_Mhy

2020/02/12 01:11

HTMLをご提示ください。
x_x

2020/02/12 02:40

deleteRow 呼び出し部分を書いてください。
kj-mimolette

2020/02/15 02:07

ご回答ありがとうございます。 質問後色々と試した結果思い通りの動きをするようになりました。 HTMLの方も自己解決方法に記載しましたのでよろしければご覧ください。
guest

回答1

0

自己解決

自己解決(?)したのでこちらに記載します。

私の書いたHTML上では<ons-list-item>の親要素は<ons-list>でしたが、実はDOM上では<ons-list-item><ons-list>の間にもう一つ入れ子があったようで、<ons-list-item>の親要素を削除すれば上手くいきました。
これがOnsenUIの仕様なのか私の理解不足なのかは分かりませんが、誰かの参考になればと思い記載してみました。
ご回答して下さった方々ありがとうございました。
質問にHTMLを載せていなかったので最後に載せようと思います。

HTML

1<!DOCTYPE HTML> 2<html> 3<head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 6 <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: content: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> 7 <script src="components/loader.js"></script> 8 <link rel="stylesheet" href="https://unpkg.com/onsenui/css/onsenui.css"> 9 <link rel="stylesheet" href="https://unpkg.com/onsenui/css/onsen-css-components.min.css"> 10 <script src="https://unpkg.com/onsenui/js/onsenui.min.js"></script> 11 <link rel="stylesheet" href="components/loader.css"> 12 <link rel="stylesheet" href="css/style.css"> 13</head> 14<body> 15<ons-navigator swipeable id="myNavigator" page="page1.html"></ons-navigator> 16 17<template id="page1.html"> 18 <ons-page id="page1"> 19 <ons-toolbar> 20 <div class="center">材料費計算</div> 21 </ons-toolbar> 22 23 <ons-card> 24 <ons-list id="list" modifier="inset"> 25 <ons-list-header> 26 <ons-row> 27 <ons-col width="70px"> 28 <div class="item-title">素材</div> 29 </ons-col> 30 <ons-col width="150px"> 31 <div class="item-title">商品</div> 32 </ons-col> 33 <ons-col width="100px"> 34 <div class="item-title">使用量</div> 35 </ons-col> 36 <ons-col width="70px"> 37 <div class="item-title">小計</div> 38 </ons-col> 39 <ons-col width="70px"> 40 <div class="item-title"></div> 41 </ons-col> 42 </ons-row> 43 </ons-list-header> 44 <ons-list-item> 45 <ons-row id="row0" class="row" align="center"> 46 <ons-col width="70px"> 47 <ons-input type="text" class="material" value="" modifier="underbar"></ons-input> 48 </ons-col> 49 <ons-col width="150px"> 50 <ons-input type="tel" id="amount0" class="amount" value="" onchange="changeAmountCalc(this)" modifier="underbar"></ons-input>㌘・ <ons-input type="tel" id="price0" class="price" value="" onchange="changePriceCalc(this)" modifier="underbar"></ons-input>円 51 </ons-col> 52 <ons-col width="100px"> 53 <ons-input type="tel" id="useAmount0" class="useAmount" value="" onchange="changeUseAmountCalc(this)" modifier="underbar"></ons-input>㌘ 54 </ons-col> 55 <ons-col width="70px"> 56 <span id="sum0" class="sum">0</span>円 57 </ons-col> 58 <ons-col width="50px"> 59 <ons-button class="delbtn" type="button" id="delBtn1" class="delete" onclick="deleteRow(this)">削除</ons-button> 60 </ons-col> 61 </ons-row> 62 </ons-list-item> 63 </ons-list> 64 <br> 65 <ons-button type="button" id="coladd" onclick="coladd()">追加</ons-button> 66 <br><br> 67 <div class="total-wrapper">合計:<span id="total">0</span>円</div> 68 </ons-card> 69 70 <ons-button id="push-button">Push page</ons-button> 71 </ons-page> 72</template> 73 74<template id="page2.html"> 75 <ons-page id="page2"> 76 <ons-toolbar> 77 <div class="left"><ons-back-button>Page 1</ons-back-button></div> 78 <div class="center"></div> 79 </ons-toolbar> 80 81 <p>This is the second page.</p> 82 </ons-page> 83</template> 84<script> 85document.addEventListener('init', function(event) { 86 var page = event.target; 87 88 if (page.id === 'page1') { 89 page.querySelector('#push-button').onclick = function() { 90 document.querySelector('#myNavigator').pushPage('page2.html', {data: {title: '材料登録'}}); 91 }; 92 } else if (page.id === 'page2') { 93 page.querySelector('ons-toolbar .center').innerHTML = page.data.title; 94 } 95}); 96</script> 97<script src="js/script.js"></script> 98</body> 99</html> 100

投稿2020/02/15 02:03

kj-mimolette

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問