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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

HTML

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

Q&A

2回答

1850閲覧

javascriptのscriptの挙動について(jQuery sortable)

lukeei8ht

総合スコア2

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

HTML

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

0グッド

1クリップ

投稿2019/08/13 07:55

scriptの実行タイミング?の理解がいまいちなので質問します

やりたいこと

jQueryのsortableを使ってリストの並び替えを行う。
その後リストの並びをリセットするためにinnerHTMLを使ってリストを初期状態で上書きする。

概要

(プログラム例

javascript

1<head> 2<script src="https://code.jquery.com/jquery-1.12.4.js"></script> 3<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 4<script> 5 $(function(){ 6 $("#sortable").sortable(); 7 }); 8 var a='<ul id="sortable"><li>1</li><li>2</li><li>3</li></ul>'; 9</script> 10</head> 11 12<body> 13<div> 14<ul id="sortable"> 15 <li>1</li> 16 <li>2</li> 17 <li>3</li> 18</ul> 19</div> 20<input type="button" value="reset" onclick="document.getElementsByTagName('div')[0].innerHTML=a"> 21<input type="button" value="sortable" onclick='$(function(){$("#sortable").sortable();})'> 22 23</body>

ごそっと<ul>...</ul>をresetボタンを押してリセットした場合、並び替えができなくなります。

対策

  1. 根本的な対策として、そもそも<ul>下の<li>の部分だけ書き換えれば良いということはわかっています。
  2. 別のやり方として試しに、sortableボタンを作って、押したら下記scriptを走らせるようにしたら、並び替えができるようになりました。

javascript

1$(function(){ 2 $("#sortable").sortable(); 3 });

質問

仮に<ul>...</ul>全体を書き換える場合、2. の対策以外にスマートなやり方はありますか?

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

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

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

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

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

guest

回答2

0

jQueryあまり詳しくないのでもっと良いやり方あると思いますが、以下のようにresetでやりたい事を関数に切り出せばとりあえず実現はできます。

function hoge() { document.getElementsByTagName('div')[0].innerHTML='<ul id="sortable"><li>1</li><li>2</li><li>3</li></ul>' $("#sortable").sortable() }
<input type="button" value="reset" onclick="hoge()">

※タイトルにjQueryとありますが、sortableはjQuery UIの機能です。

投稿2019/08/13 08:29

編集2019/08/13 08:30
yamap55

総合スコア1376

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

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

lukeei8ht

2019/08/13 08:43

回答ありがとうございます! やはりscript自体はリストのリセットに応じて毎回実行し直す必要がある感じですかね ※UIなんですね。失礼しました。ご指摘ありがとうございます
guest

0

Sortable は親だけではなく子にも mousedown 等がつくので単に削除してしまうと壊れます。
ノードの入れ替えが面倒であればいったん破棄して再設定です。

JavaScript

1 $('#sortable').sortable('destroy').html('<li>1</li><li>2</li><li>3</li>').sortable();

https://api.jqueryui.com/sortable/#method-destroy

Sortable 適用後の clone を保持して置き換えることも考えられます。

JavaScript

1var clone = $('#sortable > *').clone(true);

jQuery

1 $('#sortable > *').each(function(index, element) { 2 $(element).replaceWith(clone.eq(index).clone(true)); 3 });

投稿2019/08/14 07:44

x_x

総合スコア13749

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

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

lukeei8ht

2019/08/16 11:51

回答ありがとうございます! 返信遅れてすみません。 どちらのやり方も子要素を入れ替えているのでそもそも問題ないですね。 ともあれこんな書き方もできるのですね。参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問