\r\n\r\n\r\n
\r\n```\r\n\r\n下記 Index.jsの中身\r\n```JavaScript\r\n$(function(){\r\n\t$('#list').selectable({\r\n\t\tcancel: '.sort-handle'\r\n\t}).sortable({\r\n\t\titems: \"> li\",\r\n\t\thandle: '.sort-handle',\r\n\t\tcancel: '.fixposition',\r\n\t\thelper: function(e, item) {\r\n\t\t\tif (!item.hasClass('ui-selected')) {\r\n\t\t\t\titem.parent().children('.ui-selected').removeClass('ui-selected');\r\n\t\t\t\titem.addClass('ui-selected');\r\n\t\t\t}\r\n\r\n\t\t\tvar selected = item.parent().children('.ui-selected').clone();\r\n\t\t\titem.data('multidrag', selected).siblings('.ui-selected').remove();\r\n\t\t\treturn $('
  • ').append(selected);\r\n\t\t},\r\n\t\tstop: function(e, ui) {\r\n\t\t\tvar selected = ui.item.data('multidrag');\r\n\t\t\tui.item.after(selected);\r\n\t\t\tui.item.remove();\r\n\t\t},\r\n\t\tupdate: function() {\r\n\t\t\tvar order = $(\"#list\").sortable('serialize');\r\n\t\t\tconsole.log(order);\r\n\t\t}\r\n\t});\r\n});\r\n```","answerCount":2,"upvoteCount":0,"datePublished":"2019-01-31T01:31:49.247Z","dateModified":"2019-01-31T01:31:49.247Z","acceptedAnswer":{"@type":"Answer","text":"yambejp様\r\nご指摘頂きましてありがとうございます。\r\n\r\n一旦固まりつつありました仕様が二転三転しており、一旦質問をクローズしたいと思います。\r\n\r\n完全に仕様が固まり、もう一度調べなおしてわからない場合は改めて質問作成致します。\r\nご迷惑おかけ致しまして申し訳ございませんでした。","dateModified":"2019-01-31T02:11:53.693Z","datePublished":"2019-01-31T02:11:53.693Z","upvoteCount":0,"url":"https://teratail.com/questions/171857#reply-255979"},"suggestedAnswer":[{"@type":"Answer","text":"単純に3の順番がかわったときに2番めの要素の後ろに3を挿入すればよいでしょう。\r\n\r\nしかし多少無理がないですか?\r\n仮に3固定で1-2-3-4-5の2を4の前に持っていくと\r\n1-?-3-2-4-5となり3固定は担保されません。\r\nこの辺の仕様をどうするか決められるならなんとかできなくないと思います","dateModified":"2019-01-31T01:40:25.462Z","datePublished":"2019-01-31T01:40:25.462Z","upvoteCount":2,"url":"https://teratail.com/questions/171857#reply-255969","comment":[{"@type":"Comment","text":"ご指摘ありがとうございます。\r\n仰る通りです。そこまで気が回ってませんでした。\r\n\r\n仕様について確認したところ、\r\n1-2-[3]-4-[5]の場合\r\n移動できるのは1、2のスイッチだけで、他は移動不可という形になりました。\r\n結果としましては、不動の要素を跨いでの移動は出来ない形となります。","datePublished":"2019-01-31T01:48:55.320Z","dateModified":"2019-01-31T01:48:55.320Z"},{"@type":"Comment","text":"[]は固定を表しております。\r\n言葉足らずで申し訳ございません。","datePublished":"2019-01-31T01:49:43.242Z","dateModified":"2019-01-31T01:49:43.242Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"jQuery UIに関する質問","url":"https://teratail.com/tags/jQuery%20UI"},{"@type":"ListItem","position":3,"name":"jQuery UI","url":"https://teratail.com/tags/jQuery%20UI"}]}}}
    質問するログイン新規登録
    jQuery UI

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

    JavaScript

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

    jQuery

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

    Q&A

    解決済

    2回答

    4726閲覧

    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

    0

    0

    お世話になります。

    件名について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

    総合スコア118164

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

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

    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.29%

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

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

    質問する

    関連した質問