下記のコードは、●をクリックすると、その隣の、inputフォームにHello!!と入力されるようにしました。jQueryでは、指定したクラスより、$(this).parent().parent().next().children('input').val('Hello!World' ).focus(); のように、簡単に、親⇒親⇒次⇒子供のように、メソッドを連結させて取得できますが、これをjavascriptで書くとどのような書き方になるのでしょうか?
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.1 …
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1 …
<script>
$(function () {
$('table').on('click', '.maru', function(){
$(this).parent().parent().next().children('input').val('Hello!World' ).focus();
});
});
</script>
</head>
<body >
<table class="table">
<tbody>
<tr>
<td>1</td>
<td><div><div class="maru">●</div></div></td>
<td><input type="text" value=""></td>
</tr>
<tr>
<td>2</td>
<td><div><div class="maru">●</div></div></td>
<td><input type="text" value=""></td>
</tr>
</tbody>
</table>
</body>
</html>
今考えていることは、下記のように、配列に、順番にnodeNameとclassNameを取得して、何とかならないかと思っているのでけど、… かなり検討ちがいなことしているような気がしてきたので、…質問するに至りました。 .... javascriptかなり難しいです。
<script>
document.addEventListener('click', function (e) {
var node = new Array();
node[0] = {nodeName:e.target.nodeName, className: e.target.className};
var parent = e.srcElement.parentNode;
for(var i = 1; parent; i++) {
node[i] = {nodeName:parent.nodeName, className:parent.className, };
parent = parent.parentNode;
}
console.dir(node);
});
</script>
No.2
- 回答日時:
テーブルの親の親という時点でなにか勘違いがありそうです
またテーブルタグを指定する際にはテーブルが1つしかないという担保がないと処理できません
もし複数ある場合は、全てに適用するのか1番最初のものだけでいいのか仕様を提示しなくてはなりません
またchildで指定するinputについても同様です。
基本的にはparentNodeとnextElementSibling、querySelectorの組み合わせでやります
複数のタグにすべて適用するならquerySelectorAllをループ処理する必要があります
No.1ベストアンサー
- 回答日時:
こんにちは
回答がないみたいなので・・・
>これをjavascriptで書くとどのような書き方になるのでしょうか?
jQueryはjavascriptですので、そのままでもjavascriptだと言うことができますが、素のスクリプトで記述した場合という意味と解釈しました。
イベントの設定などは省くものとして、取得したエベント要素(div.maru)から、目的とする要素(input)を取得する方法として考えるならば、ご提示のHTMLの場合、「同じtr内の input type="text"要素」という考え方をすれば
element.parentNode.parentNode.parentNode.querySelector("input[type='text']")
で取得できると思います。
他の考え方として、表内のセル位置に注目して「同じ行内の3列目のinput要素」と考えることもできますし、あるいはdiv.maruとinputが必ず1対1で対応しているのなら、「table内のdiv.maruのindex(順序)でtable内のinput要素を指定する」方法でも同様の結果になると思います。
>parent().parent().next().children('input')
を忠実になぞるならば、parent()はparentNodeで、next()はnextSiblingで、children('input')はgetEiemensByTagName("input")やquerySelector("input")に置き換えればよいと思われます。
ただし、nextSibling等の場合はテキストノードもカウントしますので、これをスキップする処理などを加えておく必要があります。
例えば、
var e = element.parentNode.parentNode.nextSibling;
while(e && e.nodeName == "#text") e = e.nextSibling;
if(e) e = e.querySelector("input[type='text']");
のような感じでしょうか。
とは言え、このような辿り方をしても、jQueryと完全に一致するわけではありません。
一番大きな違いは、jQueryでは要素数(単数、複数)にかかわらず同じ記述法をとることができますが、素のスクリプトの場合はそうではないからです。
また、通常のスクリプトではメソッドチェーン的な記述はできませんが、同じような記法をとりたければ、オレオレQueryのようなものを作成することで実現可能となるでしょう。
ありがとうございます。とても分かりやすく説明していただいて感謝します。
少々まちがった解釈をしてたので大きな気づきとなりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptで画像の移動
-
html内>テーブル内に複数のjav...
-
javascriptで画像をテーブルに...
-
javascriptでスロットマシン
-
idの振り直しについて
-
クリックで指定のテーブルの背...
-
テーブルの行数を可変長にした...
-
クリックごとに文字色が交互に...
-
<JavaScript>tableタグを入力不...
-
プルダウンメニューを表の中に...
-
return trueとreturn falseの用...
-
追加ボタンを押した際に ok ボ...
-
チェックボックスのON/OFFでVal...
-
<form action="#">の意味とは?
-
jQuery セレクトボックスで選択...
-
フォームが空欄の時にフォーム...
-
【jQuery】input nameの文字列...
-
新しくフォルダを作成したい
-
javascriptの値をformのinput h...
-
正規表現で複数マッチ条件で悩...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<JavaScript>tableタグを入力不...
-
画面表示とともに、テーブルの...
-
selectのonChangeが動作しません
-
テーブルの行数を可変長にした...
-
テキストエリアに入力した改行...
-
【jQuery】tableループ内のIDの...
-
idの振り直しについて
-
プルダウンメニューを表の中に...
-
javascriptで画像をテーブルに...
-
javascriptで<table>背景色の取得
-
どこに挿入?
-
javascriptでクリックするごと...
-
jquery にて、アラートダイアロ...
-
Javascriptでテーブルタグの座...
-
動的なcheckboxのcheckedについて
-
javascriptで画像の移動
-
<iframe>内にHTMLをランダム表...
-
クリックごとに文字色が交互に...
-
javascriptでスロットマシン
-
連動テーブルのクロスハイライト
おすすめ情報