要件定義
質問の中で要件が曖昧で伝わってきません。
それぞれの要素に対して例えば、文字を変更するという動作をJavaScriptで書いた場合、
それらの処理は固有処理として定義しますか。同一処理として単一関数を定義しますか。
固有処理ならid属性を使い、同一処理ならclass属性で同じ値を指定すれば良いのではないでしょうか。(おそらく、mts10806さんも同様の指摘をしています)
くWebページでパネルがいくつも並んでいて、それぞれをクリックするとそれぞれのパネルに対応した編集画面が出るという動作があると思うのですが、
それをもっと具体的に書いてください。
teratailでは適切な質問をする為の案内が用意されていますので、下記参照の上、質問内容を編集する事を推奨します。
下記は私が独断と偏見で質問内容を想像して、回答したものです。
Document.prototype.getElementsByClassName
getElementsByClassName
の返り値は配列ではありませんが、HTMLCollectionという疑似配列を返します。
配列と同様、elements[0]
のように数値添え字で参照可能なので、for
文などの繰り返し処理が使えます。
NodeList.prototype.forEach
ここでは、NodeList.prototype.forEach
を使いますが、前述の getElementsByClassName
を使っても構いません。
HTML
1<ul>
2 <li class="test" data-replace-text="Hello">abc</li>
3 <li class="test" data-replace-text="World">def</li>
4 <li class="test" data-replace-text="JavaScript">ghi</li>
5</ul>
6
7<script>
8'use strict';
9document.querySelectorAll('.test').forEach(li => li.addEventListener('click', event => {
10 const li = event.currentTarget;
11
12 li.textContent = li.getAttribute('data-replace-text');
13}, false));
14</script>
イベントバブリング
親ノードでイベント定義する事で、イベントハンドラ処理を一つにまとめます。
HTML
1<ul id="test">
2 <li data-replace-text="Hello">abc</li>
3 <li data-replace-text="World">def</li>
4 <li data-replace-text="JavaScript">ghi</li>
5</ul>
6
7<script>
8'use strict';
9document.getElementById('test').addEventListener('click', event => {
10 const li = event.target;
11
12 li.textContent = li.getAttribute('data-replace-text');
13}, false);
14</script>
テキストノード値を編集する
くWebページでパネルがいくつも並んでいて、それぞれをクリックするとそれぞれのパネルに対応した編集画面が出るという動作があると思うのですが、
編集した結果が不明ですが、Excelのような入力した結果、そのまま出力されるUIと勝手に想像します。
入力を行うには、input要素、textarea要素などの入力可能なパーツが必要です。
例えば、次の処理工程が考えられます。
addEventListener
で click
イベントハンドラを定義
- click イベントハンドラから既存のテキストノードを
createElelement
で生成したinput要素ノードと replaceChild
を使って、入れ替える(テキストノードは変数 textNode
に保存しておく)
blur
, submit
イベント等で入力確定タイミングを捕捉
- 入力内容を HTMLInputElement.prototype.value で参照し、
textNode.data = value
でテキストノード値に代入
removeChild
でinput要素ノードとテキストノード(変数 textNode
)を入れ替える
これまでの説明が「まるで意味が分からない」という状況であれば、まずはDOMについて学習して下さい。
更新履歴
- 2019/03.23 12:10 「テキストノード値を編集する」節を
replaceChild
を使った処理工程に変更(Excel入力UI)
Re: Yhaya さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/23 05:01