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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

Q&A

解決済

2回答

2943閲覧

jQueryで特定のname属性だけ変更したいのに意図していないものまで変更されてしまいます

ringoringogogo

総合スコア15

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

0グッド

1クリップ

投稿2021/07/06 07:45

編集2021/07/06 08:04

WordPressのサイトオプション画面を開発しており、ボタンをクリックするとテキストボックスを増やし、name属性をそれぞれ変更したいと考えています。

最初にこのようなHTMLを出しています。

HTML

1<button id="add_image_button" type="button">スライドを追加する</button> 2<div class="form-block" id="form_block[0]"> 3 <!-- Closeボタン --> 4 <span class="close" title="Close">-</span> 5 <input class="clonetarget" type="text" name="imagesliders['slidedata0'][]" value="https://xxxxx.jp/wp-content/uploads/xxx.jpeg" placeholder="画像URL"> 6</div>

同じ画面にボタンを用意しており、それをクリックするとname属性を imagesliders['slidedata1']としてたいのですが、どうももともとあるform_block[0]の中のimagesliders['slidedata0']もslidedata1となってしまいます・・・

WordPressではなく、プレーンなテキストファイル.htmlとして切り出してみても同じ結果となってしまい、jQueryの理解不足が原因かと思うのですがどこが間違っているのかが分かりません・・・。
大変恐れ入りますがご指摘いただけませんでしょうか・・?

php

1<script> 2 (function ($) { 3 $('#add_image_button').on('click', function() { 4 var frm_cnt = 0; 5 var original = $('#form_block\[' + frm_cnt + '\]'); 6 7 frm_cnt++; 8 console.log("frm_cnt:"+frm_cnt); 9 original 10 .clone() 11 .hide() 12 .insertAfter(original) 13 .attr('id', 'form_block[' + frm_cnt + ']') // クローンのid属性を変更。 14 .end()// 一度適用する 15 .find( '.clonetarget').each(function(idx, obj) { 16 console.log("each入りました"+idx); 17 var name = $('input[name="imagesliders[\'slidedata'+ (idx)+'\'][]"]').attr('name','imagesliders[’slidedata'+ (idx+1)+'\’][]'); 18 console.log( name[0] ); 19 $(obj).val(''); 20 }); 21 22 // clone取得 23 var clone = $('#form_block\[' + frm_cnt + '\]'); 24 clone.children('span.close').show(); 25 clone.slideDown('slow'); 26 27 }); 28 29 })(jQuery); 30 </script>

.find( '.clonetarget').each(function(idx, obj) としている部分で、originalの方子要素を探しに行っているのか?と思い、ここの.find以下はコメントアウトし、最後のclone.slideDownの下に
clone.find('.clonetarget').each(function (idx, obj) {
console.log("each入りました" + idx);
var name = $('input[name="imagesliders['slidedata' + (idx) + ''][]"]').attr('name', 'imagesliders[’slidedata' + (idx + 1) + '\’][]');
console.log(name[0]);
$(obj).val('');
});

});
としても結果は同じでした・・・。

子要素の操作方法が間違っているのかと思うのですが調べても分からず、教えていただけると幸いです・・・。

以上よろしくお願いいたします。

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

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

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

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

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

juner

2021/07/06 08:08

.end() は find や filter などによるstack を元に戻す意図であることを理解していますでしょうか? つまり $elm.find('selector').end() === $elm の様な感じ jQuery の clone() も stack される関数で、前の値は文字通り、clone元の要素なのですが、把握していますでしょうか?
ringoringogogo

2021/07/06 08:34

「.end() は find や filter などによるstack を元に戻す意図であること」と全く理解できておりませんでした・・・。 今回どのようにしたら良いかも検討がつかないので、end()についてもう少し調べてみることにいたします。ご回答ありがとうございます。
juner

2021/07/06 08:38

多分 .end() しなければ clone() 前の要素の選択にならない筈なので .end() 外せば意図した動作になるとは思います。
ringoringogogo

2021/07/06 08:42

end()を外したのですが同じ結果となってしまいました・・・。
juner

2021/07/06 08:59

とりあえず https://codepen.io/pen/ とかで 動作するサンプル作ってみたら 回答を得られやすいと思われます。
guest

回答2

0

自己解決

$(obj).attr('name', 'imagesliders[’slidedata' + (idx + 1) + '\’][]');
とすればいけました!!!
(var name = $('input[name="imagesliders['slidedata' + (idx) + ''][]"]').attr('name', 'imagesliders[’slidedata' + (idx + 1) + '\’][]');としていたところを削除)

codepenを使った方が良いことや、idの名前を簡素化することなど、教えていただいてありがとうございました!!

投稿2021/07/06 11:00

ringoringogogo

総合スコア15

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

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

0

$('#form_block[' + frm_cnt + ']');

特殊な文字をつかったIDは$('#~')では拾えないのでは?
面倒でも$('[id="特殊な文字"]')で拾ってみて下さい
(というかそんな苦労してまで変なidをつけるのをやめるほうが現実的)

投稿2021/07/06 09:14

編集2021/07/06 09:16
yambejp

総合スコア116391

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

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

juner

2021/07/06 09:20

いや、 "[" は普通にエスケープすれば使える文字ですし、取得できますよ……?(jQuery でも querySelectorsAll でも取得できますよ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問