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

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

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

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

jQuery

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

Q&A

解決済

1回答

3727閲覧

【jQuery/nestable】JSONから作成したTreeのJSONを取得し直したい

nnahito

総合スコア2004

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

jQuery

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

0グッド

0クリップ

投稿2017/01/03 04:30

編集2017/01/03 06:40

質問概要

nestableを使ったツリーノードで、JSONからツリーを作成した後、
変更内容をJSONで取得したいが、取得できない。

取得には、
$('.dd').nestable('serialize');
を利用。

質問詳細

Electronを使って、簡単なエディタ(アウトラインプロセッサ)を作ろうとしています。
そのアウトライン部分に、ツリーを使いたく探していたときに、
nestableというフレームワークを見つけたのですが、
JSONから作成したツリーのJSONが、nestableにもともと有る$('.dd').nestable('serialize');では取得できませんでした。

サンプルを見たところ、以下の図のように取得出来るようにはなっているようですが、その方法が分かりません。
イメージ説明

アウトラインプロセッサなので、ツリーの生成と削除ができるように、
以下のような関数を組みましたが、生成は出来るのですが、取得ができません。

javascript

1 2<!-- ツリー部分 --> 3<div class="dd" id="TreeNode"> 4 <ol class='dd-list dd3-list'> 5 <div id="dd-empty-placeholder"></div> 6 </ol> 7 </div> 8 9 10<!-- JSON出力部分 --> 11<textarea id="nestable-output"></textarea> 12 13 14<script> 15/* JSONからTreeを作成 */ 16 function createTreeNode(json){ 17 18 var updateOutput = function(e) { 19 var list = e.length ? e : $(e.target), 20 output = list.data('output'); 21 if(window.JSON) { 22 output.val(window.JSON.stringify(list.nestable('serialize')));//, null, 2)); 23 } 24 else { 25 output.val('JSON browser support required for this demo.'); 26 } 27 }; 28 29 var obj = json; 30 var output = ''; 31 function buildItem(item) { 32 33 var html = "<li class='dd-item' data-id='" + item.id + "'>"; 34 html += "<div class='dd-handle dd3-handle'></div><div class='dd3-content'>" + item.title + "</div>"; 35 html += '<div>[<a href="javascript:addTreeNode('+ item.id +');">+</a>]</div>'; 36 37 38 if (item.children) { 39 html += "<ol class='dd-list'>"; 40 $.each(item.children, function (index, sub) { 41 html += buildItem(sub); 42 }); 43 html += "</ol>"; 44 } 45 46 html += "</li>"; 47 return html; 48 } 49 50 $.each(JSON.parse(obj), function (index, item) { 51 output += buildItem(item); 52 }); 53 54 $('#dd-empty-placeholder').html(output); 55 $('#TreeNode').nestable().on('change', updateOutput); 56 57 updateOutput( $('#TreeNode').data('output', $('#nestable-output')) ); 58 59 } 60</script>

エラー

TypeError: output is undefined TypeError: el[0] is undefined

まず、以下のスクリプトがいまいち理解できず躓いております。

javascript

1var updateOutput = function(e) { 2 var list = e.length ? e : $(e.target), 3 output = list.data('output'); 4 if(window.JSON) { 5 output.val(window.JSON.stringify(list.nestable('serialize')));//, null, 2)); 6 } 7 else { 8 output.val('JSON browser support required for this demo.'); 9 } 10 };

皆様のお知恵をお貸しください。
よろしくお願いいたします。

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

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

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

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

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

kei344

2017/01/03 04:44

「取得できませんでした」とは具体的にどのような状況でしょうか。(値が無かった、関係ない文字列だったなど)
nnahito

2017/01/03 06:10

閲覧ありがとうございます。空のArrayが返ってくる、という状態です。素人ながら、jQueryで動的に作成したものなので、再取得ができていないのかなと思っていたりします。
kei344

2017/01/03 06:27

質問文に #dd-empty-placeholder, #TreeNode, #nestable, #nestable-output の要素が見当たりません。
nnahito

2017/01/03 06:33

申し訳ありません、間違った部分をペーストしておりました。修正しました。
kei344

2017/01/03 06:43

#nestable, #nestable-output の要素が見当たりません。
nnahito

2017/01/03 06:52

すいません、追記しました
guest

回答1

0

ベストアンサー

とりあえずHTML文法違反なので問題なのと、serialize 処理の記述がOL要素直下のli要素を探すため、どちらも問題では。

HTML

1<ol class='dd-list dd3-list'> 2 <div id="dd-empty-placeholder"></div> 3</ol>

【ol 要素 - HTML | MDN】
https://developer.mozilla.org/ja/docs/Web/HTML/Element/ol

許可された内容 0 個以上の <li> 要素

投稿2017/01/03 07:36

kei344

総合スコア69407

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

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

nnahito

2017/01/03 07:46

ご回答ありがとうございます。 >HTML文法違反なので問題 恐らく、このHTML文法違反というのは、olにdivが挟まっているということだと思いますが、 公式のUsageにそう書かれているのです…… https://github.com/RamonSmit/Nestable 実際、 <div id="dd-empty-placeholder"></div> を、消してみるとTreeが生成されませんでした……
nnahito

2017/01/03 08:12

ご回答ありがとうございます。 その部分を忘れておりました…申し訳ありません。 idをolに振り直すと、無事取得できました。 ご迷惑をおかけいたしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問