teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

特定用の class を付けるべきは td ではなく tr

2016/06/21 04:03

投稿

sk_3122
sk_3122

スコア1126

answer CHANGED
@@ -39,7 +39,7 @@
39
39
 
40
40
  うーん、tr の parentNode から tr 数を取って、
41
41
  追加&削除ボタンの tr はカウント対象外だから -1 して・・・とかもできますけど
42
- 私だったらドロップダウン用の td に それ用の class を指定して、それでカウントしますかねえ・・・
42
+ 私だったらドロップダウン用の tr に それ用の class を指定して、それでカウントしますかねえ・・・
43
43
  (それか最初に書いたカウント用変数を使う版ですけど・・・でも class かなあ)
44
44
 
45
45
  # すいません 脊髄反射で回答してしまって・・・

2

色々間違っていたので書き直し。

2016/06/21 04:03

投稿

sk_3122
sk_3122

スコア1126

answer CHANGED
@@ -1,21 +1,45 @@
1
- ボタン数を管理する `var btnCount = 0;` のような変数を用意して、
1
+ ドロップダウン数を管理する `var selectCnt = 0;` のような変数を用意して、
2
2
 
3
- ボタンを追加したら `btnCount += 1;`
3
+ ドロップダウンを追加したら `selectCnt += 1;`
4
- ボタンを削除したら `btnCount -= 1;`
4
+ ドロップダウンを削除したら `selectCnt -= 1;`
5
5
 
6
6
  などのように増減する。
7
7
 
8
- ボタンを追加しようとした際に「ボタン数が10以上かどうか」をチェックして、
8
+ ドロップダウンを追加しようとした際に「ドロップダウン数が10以上かどうか」をチェックして、
9
9
  上限を超えているようであれば追加させない、のようにすると良いのではないでしょうか。
10
10
 
11
11
  ----
12
+ ・・・と、リロードしたら他の方の回答が付いてました。
12
13
 
13
- ・・・ってここまで書いてリロードしたら他の方の回答が付いてました
14
- そうでね、length 取れば良だけでね;;
14
+ すいません ちょっと元ソースちゃんと読みま
15
15
 
16
+ ```
17
+ function skill_selectAdd(){
16
- target.children.length <tr id="skill_selectAdd"> の子要素の数
18
+ var get = document.getElementById("skill_select"); //★ <tr id="skill_select"> を取る
17
- = このソースだと <tr id="skill_selectAdd"> 配下の <td> の数
18
- = 「追加&削除ボタンのセット数」です。
19
19
 
20
+ var set = get.cloneNode(true); //★ それをコピーする
21
+
22
+ var target = document.getElementById("skill_selectAdd"); //★ それとは別に <tr id="skill_selectAdd"> を取る
23
+
24
+ var btn_delete = document.getElementById("skill_select_btnDel"); //★ button id="skill_select_btnDel" を取る
25
+
26
+ set.id= "test" + target.children.length;//idの重複を防ぐため、連番をつけておく //★ 「コピーしたtr」にidをつける
27
+
28
+ target.parentNode.insertBefore(set, target); //★ target の親に「コピーしたtr」を追加
29
+
30
+ btn_delete.disabled = false; //★削除ボタンを有効化
31
+ }
32
+ ```
33
+
34
+ えーっと
20
- ボタンの追加処理に入る前にこれチェックして
35
+ <tr id="skill_select"> コピーして
36
+ <tr id="skill_selectAdd"> の兄弟要素として追加してる、んですかね。
37
+ じゃあ <tr id="skill_selectAdd"> の children.length 取ってもダメか。
38
+ (てかそれだとそもそも "idの重複を防ぐため、連番をつけておく" の部分も間違いです?)
39
+
21
- 上限を超えているよ追加せず処理抜ければ良いと思います。
40
+ ーん、tr の parentNode か tr 数取って、
41
+ 追加&削除ボタンの tr はカウント対象外だから -1 して・・・とかもできますけど
42
+ 私だったらドロップダウン用の td に それ用の class を指定して、それでカウントしますかねえ・・・
43
+ (それか最初に書いたカウント用変数を使う版ですけど・・・でも class かなあ)
44
+
45
+ # すいません 脊髄反射で回答してしまって・・・

1

記述に誤りがあったので修正。target\.children\.length はボタンの数ではない

2016/06/21 03:48

投稿

sk_3122
sk_3122

スコア1126

answer CHANGED
@@ -13,6 +13,9 @@
13
13
  ・・・ってここまで書いてリロードしたら他の方の回答が付いてました
14
14
  そうですね、length 取れば良いだけですね;;
15
15
 
16
- target.children.length がボタン数なで、
16
+ target.children.length は <tr id="skill_selectAdd"> 子要素
17
+ = このソースだと <tr id="skill_selectAdd"> 配下の <td> の数
18
+ = 「追加&削除ボタンのセット数」です。
19
+
17
20
  ボタンの追加処理に入る前にこれをチェックして
18
21
  上限を超えているようなら追加せず処理を抜ければ良いと思います。