回答者の皆様にはいつも大変にお世話になっております。
jQueryのload命令で別のhtmlを読み、#content要素を差し替えたく思っています。
読み込むhtmlにも同idの#content要素があります。
$("#content").load("contents1.html #content");
ところが、これを行うと、どうも、
<div id="content">
<div id="content">新しく読み込んだ内容</div>
元々の内容</div>
のように2重に生成されてるようなのです。
コード例は簡略化してありますが、実際にはJavaScriptコードなどが入ったややこしいもので、CSSも、Javascriptも複雑怪奇で手が出ません。
また、各htmlは事情があり、内容を編集できません(外部でjava生成)。
どうやって読みこんだら要素差し替えられますでしょうか?
お助けを!!
No.3ベストアンサー
- 回答日時:
ANo2です。
スクリプトの追加・修正が可能なものとして、回答いたします。
スクリプトの追加や編集にどれだけの自由度が残されているのか(あるいは制約があるのか)、ご質問文からは明確には読取れませんので、そのあたりは工夫していただくとして…
>両方とも同じidだし。。仮置きできるエリアもないし。。ずっと困っています
はい、同じidなので一時的にしろ文法違反を作るのも気持ち悪いですよね。
まぁ、
<div id="content"><div id="content">~~</div></div>
となっている場合でも、jqueryでは読み取ってくれる可能性は高いですが、やらないに越したことは無いと思います。
それなので、仮の要素に一旦入れればよろしいでしょう。
仮の要素が無ければ、一時的に作ってしまえば良いということで…
var div = document.createElement("div");
var content = $("#content");
$(div).load("contents1.html #content", function(){
content.html($("#content", div).html());
});
replaceAll()でなく、html()で記述していますがほとんど同じことかと思います。
innerHTMLを利用しても同様ですね。
上記をそのまま記述すると、変数div、contentを新しく作成しているため、他の部分で使用しているかも知れない「変数div」等とコンフリクトする可能性をゼロにはできません。それを避ける意味からも(文字数が許すのであれば)匿名関数で処理をするなどにしておく方が安全かと思います。
(他の部分が複雑で理解不能とのことですので、なおさらですね)
ちょとひねって
$("#content").load("contents1.html #content>*");
とすれば一発でいけてしまうようですが、#content直下にテキストなどがある場合に全ての環境で確実に取得できるのかどうかが私にはわかりません。(大丈夫そうな気はしますが、ちゃんと調べていませんので)
普通に、ajaxで取得して置き換える際にはloadではなく、getやajaxを用いることになると思いますが、スクリプトの記述はもう少し長くなるかと思います。(研究してみてください)
fujillinさん、何度もありがとうございます。
なるほど~ 仮のdivを作ってそこに読込み、完了後にターゲットに内容を差し替えるわけですね!
やってみたら見事にうまくいきました。
今回は$load()で読みだす相手、読みだし元ともcgiがからんでいて、コードを書いているのが協力会社だったりして大事だったものですから、なんとかjQueryサイドで吸収しようとしてこのようなことになりました。
速い話が、読み出し先の一番外側の<div>を外してもらえればよかったのですが、いろいろと大変で。。
大変勉強になりました。ありがとうございました。
No.2
- 回答日時:
横からですが…
質問者:「自動車でアメリカまで行くのですが、海に出ると沈んでしまいます。お助けを。」
回答者:「車は空を飛んだり海を進むことができません。フェリーなどを使えばよいでしょう。」
質問者:「内陸地なのでフェリーはここまでこれないのです。質問の意図を理解して欲しい。」
というやりとりのように見えます。
ご質問文からは読取れませんが、50文字以上は記述できないとか、loadメソッド以外は用いてはならないという制約でもあるのでしょうか?
ANo1様の回答は、『load()はご質問のような処理をするメソッドではないので、replaceAll()などを利用して置き換えることが必要ではないか』といっているのではないのでしょうか。(←フェリーみたいなもの)。
別に、この方法が水陸両用とはおっしゃってませんし、さらには、(質問者様の知識内容が不明なので)念のために必要な情報のありかも提供なさっています。
>jQuery開発者ならだれでも知っている有名なリファレンスサイトです。
>とっくに調べています。
であるならばなおさらのこと、No1様の回答で充分だと思われます。
(そのサイトには、本家へのリンクもあるようですし)
回答の趣旨を理解してあげることも必要なのではないでしょうか?
さて、仮にご質問が、
>$("#content").load("contents1.html #content");
を一切変えずになんとかしたいという趣旨だとするなら、一時的にkoadを上書きしておいて元に戻すといったことをすれば可能かとも思いますが、わざわざ面倒なことをする必要性もみあたりませんし、いずれにしろ、どこかにスクリプトを書かなければならないことに変わりありません。
上記はお行儀が悪すぎるので、やるにしてもせめて、
$("#content").load2("contents1.html #content");
とでもして、事前にload2をextendしておく方がよほど安全だし、ましな考え方でしょう。
(一文字追加になってしまいますけれど)
しかし、ご質問文を読む限りでは、そんな手間をかける必要があるとも思えません。
ANo1様の回答のように、読込んだ内容から必要な部分を抜き出して差し換えるのが素直な方法だと思います。
どうしてもload()を使いたいのであれば、少々無駄にはなりますが、一旦仮の要素に受けてから、同様に抜き出して差し替える方法でも同じ結果を得られるはずです。
>とっくに調べています。
あ・・、これも「釈迦に説法」でしたね。 大変、失礼いたしました。
この回答への補足
fujillinさま
ご回答ありがとうございます。
たしかに自分の捕捉を読み直すと、回答者さまに失礼でした。反省いたします。
今回は、読込先・読込要素ともCGI生成で、仕事的な事情で変更することが大変で、自分的に舞い上がってしまい、「そんな方法なら知ってるわ」と短絡してしまいました。
で、おっしゃっているような、「loadでいったん読み込み」「replaceAll」で差し替えるという方法論なのですが、例えば、
<div id="content">ここに読み込む</div>
というエリアを、
<div id="content">読み込む対象(長く複雑なhtmlとjavascript)</div>
という内容のcontents1.htmlで差し替えるにはどうしたら良いのでしょう。。
(contents1.htmlはこの<div>以下だけを含んだ部分htmlのエレメントファイルです)
両方とも同じidだし。。仮置きできるエリアもないし。。ずっと困っています。
No.1
- 回答日時:
.load()はHTMLを読み込んで、DOMに挿入するだけでは?
置き換えするなら.replaceAll()とかinnerHTML()とかじゃないですかね。
http://semooh.jp/jquery/api/manipulation/replace …
ここで調べてみてはいかがでしょう。
この回答への補足
回答ありがとうございます。
ですが、
replaceAllも、innerHTMLも、外部ファイルの読み込みには使えませんよ。
リテラルテキストの差し替えなら質問はしません。
あと、ご参考のサイトも、jQuery開発者ならだれでも知っている有名なリファレンスサイトです。
とっくに調べています。
質問の趣旨をご理解ください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript 読み込んだQRコードをフォームに受け渡したい 1 2023/05/18 11:18
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
読み込んだQRコードをフォーム...
-
二次元配列を使って順位をだす...
-
階層別の組織図の自動作成について
-
スマホ上で、左右スワイプで次...
-
jqueryのselect2で検索欄の文字...
-
食材の期限を管理するためにGAS...
-
Colorboxがうまく設置できません
-
セレクトを全て選択されていな...
-
【GAS】WEBアプリでハイパーリ...
-
以前の質問だと、どの条件でも...
-
二次元配列の中の各行の要素を...
-
jsで質問です。 ボタンが二つ存...
-
変数宣言と初期値代入の場所に...
-
console.logがどうしても2つ機...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
イラストレーター、縦中横のシ...
-
【Google Apps Script】「ライ...
-
ローディングアニメーションの...
-
jsonテキストデータの並び替え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インラインフレームを自動更新...
-
JQueryで動的生成のスライダが...
-
jQuery toggle() 戻るで開いた...
-
親フレームの存在確認
-
毎日午前0時にhtmlを切り替えた...
-
location.replaceでの移動
-
フレーム内の要素へのXPATHはど...
-
一定時間ごとに表示内容を切り...
-
Folder.selectDialog()について
-
日付が変わると自動更新
-
onblurイベント時にPHPファイル...
-
jQueryで文字数を丸めたい
-
javascriptのタイピングゲーム...
-
連番タイトル名を基準にリンク...
-
jQueryでloadした部分に.jsが効...
-
XHTMLで外部JSファイルを読み込...
-
jQueryのloadメソッドが時々反...
-
slideToggleを複数のボタンで適...
-
javascriptからのphpクラス...
-
JavaScriptでtabindexの変更っ...
おすすめ情報