
No.1ベストアンサー
- 回答日時:
個人的にはドラッグ&ドロップの方が使いやすいように感じますが…
細かなところがよくわからないので適当ですが、こんな感じでしょうか?
※ 少し古いブラウザも対象にしています。
※ 最近のブラウザ限定ならquerySelectorやforEach、map等が使えるので
もっと簡潔にすることができるでしょう。
(全角空白は半角に)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<style type="text/css">
ul.moveable, ul.moveable>li { list-style-type:none; margin:0; padding:0; }
ul.moveable { padding-left:3.5em; }
ul.moveable>li { position:relative; background-color:#ddd; margin-bottom:0.3em; }
ul.moveable>li div.control { position:absolute; top:0; left:-3.5em; }
ul.moveable>li div.control button { margin-right:0.3em; padding:0; font-size:x-small; }
</style>
</head>
<body>
<ul class="moveable">
<li><div>#1 item</div></li>
<li><div>#2 item</div></li>
<li><div>#3 item</div></li>
<li><div>#4 item</div></li>
<li><div>#5 item</div></li>
<li><div>#6 item</div></li>
</ul>
<script type="text/javascript">
(function(){
var uls = document.getElementsByTagName("ul");
var ctrl = createControl();
var ul, i, lis, li, j;
for(i = 0; ul = uls[i++];){
if(ul.className == "moveable"){
addEvent(ul, "click");
lis = liList(ul);
for(j = 0; li = lis[j++];) setControl(li);
}
}
function handler(evt){
var t = evt.target || evt.srcElement;
if(t.nodeName != "BUTTON" || t.parentNode.className != "control") return;
var li = t.parentNode.parentNode;
var ul = li.parentNode, lis = liList(ul);
var idx = 0, cls = t.className;
while(lis[idx] != li) idx++;
if(cls == "_UP" && idx>0) ul.insertBefore(li, lis[idx-1]);
else if(cls == "_DN") ul.insertBefore(li, lis[idx+2] || null);
}
function addEvent(e, typ){
if (e.addEventListener) e.addEventListener(typ, handler, false);
else if(e.attachEvent) e.attachEvent("on" + typ, handler);
}
function liList(ul){
var i, li, lis = [], elms = ul.childNodes;
for(i = 0; li = elms[i++];) if(li.nodeName == "LI") lis.push(li);
return lis;
}
function setControl(li){
li.insertBefore(ctrl.cloneNode(true), li.firstChild);
}
function createControl(){
var ctrl = document.createElement("div");
ctrl.className = "control";
ctrl.appendChild(createButton("_UP", "△"));
ctrl.appendChild(createButton("_DN", "▽"));
return ctrl;
}
function createButton(cls, txt){
var b = document.createElement("button");
b.appendChild(document.createTextNode(txt));
b.value = txt;
b.className = cls;
return b;
}
})();
</script>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SleniumBasicでコンパイルエラ...
-
MAX関数を使ってからLEFT JOIN...
-
jQueryで特定のURLの時のみ表示
-
あるwebサイト上の画像表示につ...
-
[急ぎ] videoタグで埋め込んだm...
-
スマートフォンサイトに部分的...
-
VBScript+IEのチェックボック...
-
バッチファイルでカウントアッ...
-
重なった画像にクリックイベン...
-
window.openで値の渡し方を教え...
-
MFCで画像を表示させているので...
-
imageクラスからiconクラスに変...
-
【HP作成】クリックすると下...
-
透過pngの透明部分以外をクリッ...
-
初期状態でテーブルの非表示
-
jQueryで画像を重ねる
-
クリックでリンク先の切り替え
-
jQueryでシンプルドラッグドロ...
-
複数の要素を表示してる時だけ...
-
jQueryでクリックされた要素のi...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ネストされたチェックボックス...
-
jqueryのsortableで一部ソート...
-
jQueryでネスト構造の<li>がク...
-
jQueryでタブ切り替え
-
【jQuery】遅延実行(タイムラ...
-
jQuery appendの中身の出力につ...
-
javascript テキストエリアを1...
-
javascriptでEnterキーをtabキ...
-
「jQuery」アコーディオンメニ...
-
【jQuery】hoverしたn秒後にイ...
-
タグの表示順を入れ替え、
-
JQueryリストタグへのページネ...
-
id付きのHTMLテキストを変更→元...
-
特定のクラスを持つ<li>を非表...
-
jqueryのプラグインflexslider...
-
DOM の 要素の数え方について
-
jquery ドロップダウンメニュー...
-
【javascript で動的に a タグ...
-
同一ページ内で、任意の文字列...
-
【jQuery】ナビゲーションにhov...
おすすめ情報
非常によくできて、良い参考になります。
あとは、表示順を変更した後、その変更順のとおりに、
テキストを json に流し込めれば完璧なのかもしれません。
ありがとうございます !