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

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

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

JavaScript

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

jQuery

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

Q&A

解決済

2回答

4164閲覧

ulのsortableで、特定のliを固定した状態で、固定されていないliだけでD&Dで並び替える方法

Batoh33789

総合スコア136

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/01/31 01:31

お世話になります。

件名について3日ほど調べてみたのですが、手法がわからず頓挫してしまいました。
御手数お掛け致しますが、ご助言頂けないでしょうか。

言葉での説明が大変難しいため、図を用いて説明致します。

1.前提として下図のように、li要素が並んでいるものとします。(なお、下は一例で、実際には列数、行数は不定となります)
![イメージ説明

2.li要素を複数選択して、移動させることはjQuery-UIのsortableを利用することで実現できました。
この例では、Item5とItem6をCTRLで選択して、D&DでItem1とItem2の間に持ってきてます。
イメージ説明

2a.この時、例えば、Item3にfixpositionというクラスを付与し、Item3だけを固定させたまま、上記2と同じ操作をした場合に、Item5、6を移動させる方法がわかりません。なってほしい形は以下の通り(例では1つ固定にしておりますが、実際には複数固定されます)
イメージ説明

試したこと
・sortableのcancelプロパティにfixpositionクラスを追記したところ、fixpostionクラスが付加されたli要素自体はD&Dが出来なくなりましたが、他のli要素を動かすと、並び順が変わってしまったため、要求を満たせなかった。

開発環境
・sakura editor
・Windows 7 Pro 64bit

フォルダ構成
・css、js、htmlが全て同一フォルダの中に入ってます。

個人的予想
・検討違いかもしれませんが、updateプロパティのsortable('serialize')の対象を変更?するだとか、indexをどこかに保持しておいてその通りに並び替えるだとかすれば、出来るような気がしていますが、コーディング方法がわかりません・・。

現状のコードを以下に記します。

HTML

1<link rel="stylesheet" href="jquery-ui.css"> 2<link rel="stylesheet" href="index.css"> 3<script src="jquery-3.3.1.min.js"></script> 4<script src="jquery-ui.js"></script> 5<script src="index.js"></script> 6<ul id="list"> 7 <li id="item_1" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 1</li> 8 <li id="item_2" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 2</li> 9 <li id="item_3" class="ui-widget-content fixposition"><span class="sort-handle">&#8225;</span>Item 3</li> 10 <li id="item_4" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 4</li> 11 <li id="item_5" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 5</li> 12 <li id="item_6" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 6</li> 13 <li id="item_7" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 7</li> 14 <li id="item_8" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 8</li> 15 <li id="item_9" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 9</li> 16 <li id="item_10" class="ui-widget-content"><span class="sort-handle">&#8225;</span>Item 10</li> 17</ul><div style="clear: both;"></div>

下記 Index.jsの中身

JavaScript

1$(function(){ 2 $('#list').selectable({ 3 cancel: '.sort-handle' 4 }).sortable({ 5 items: "> li", 6 handle: '.sort-handle', 7 cancel: '.fixposition', 8 helper: function(e, item) { 9 if (!item.hasClass('ui-selected')) { 10 item.parent().children('.ui-selected').removeClass('ui-selected'); 11 item.addClass('ui-selected'); 12 } 13 14 var selected = item.parent().children('.ui-selected').clone(); 15 item.data('multidrag', selected).siblings('.ui-selected').remove(); 16 return $('<li/>').append(selected); 17 }, 18 stop: function(e, ui) { 19 var selected = ui.item.data('multidrag'); 20 ui.item.after(selected); 21 ui.item.remove(); 22 }, 23 update: function() { 24 var order = $("#list").sortable('serialize'); 25 console.log(order); 26 } 27 }); 28});

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

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

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

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

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

guest

回答2

0

単純に3の順番がかわったときに2番めの要素の後ろに3を挿入すればよいでしょう。

しかし多少無理がないですか?
仮に3固定で1-2-3-4-5の2を4の前に持っていくと
1-?-3-2-4-5となり3固定は担保されません。
この辺の仕様をどうするか決められるならなんとかできなくないと思います

投稿2019/01/31 01:40

yambejp

総合スコア114829

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

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

Batoh33789

2019/01/31 01:48

ご指摘ありがとうございます。 仰る通りです。そこまで気が回ってませんでした。 仕様について確認したところ、 1-2-[3]-4-[5]の場合 移動できるのは1、2のスイッチだけで、他は移動不可という形になりました。 結果としましては、不動の要素を跨いでの移動は出来ない形となります。
Batoh33789

2019/01/31 01:49

[]は固定を表しております。 言葉足らずで申し訳ございません。
guest

0

自己解決

yambejp様
ご指摘頂きましてありがとうございます。

一旦固まりつつありました仕様が二転三転しており、一旦質問をクローズしたいと思います。

完全に仕様が固まり、もう一度調べなおしてわからない場合は改めて質問作成致します。
ご迷惑おかけ致しまして申し訳ございませんでした。

投稿2019/01/31 02:11

Batoh33789

総合スコア136

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問