0

jstree を使用して新しいノードを作成していますが、ノードが正しく表示されません。

以下の 2 つの図は、作成後にノードがずれている図です。

それらはdiv内のテーブル内にあります。div はスクロール可能で、ノードは最初の作成時にスクロールとともに移動します。

ノードの選択を解除すると、正しい場所に移動します。

ノードの位置がずれている画像。「作成後にノードがずれています」

ノードの位置がずれている画像。「場違いな別のノード」

どうやらこれは名前の変更でも発生します。

4

1 に答える 1

0

jstree.js の _show_input 関数を次のように変更しました。

h2 = obj.children('a:first').after(
    $("<input />", { 
        "value" : t,
        "class" : "jstree-rename-input",
        // "size" : t.length,
        "css" : {
            "padding" : "0",
            "border" : "1px solid silver",
            "left"  : (rtl ? "auto" : (w1 + w2 + 4) + "px"),
            "right" : (rtl ? (w1 + w2 + 4) + "px" : "auto"),
            "top" : "0px",
            "height" : (this.data.core.li_height - 2) + "px",
            "lineHeight" : (this.data.core.li_height - 2) + "px",
            "width" : "150px" // will be set a bit further down
        },
        "blur" : $.proxy(function () {
            var i = obj.children(".jstree-rename-input"),
                v = i.val();
            if(v === "") { v = t; }
            h1.remove();
            i.remove(); // rollback purposes
            this.set_text(obj,t); // rollback purposes
            this.rename_node(obj, v);
            callback.call(this, obj, v, t);
            obj.css("position","");
        }, this),
        "keyup" : function (event) {
            var key = event.keyCode || event.which;
            if(key == 27) { this.value = t; this.blur(); return; }
            else if(key == 13) { this.blur(); return; }
            else {
                h2.width(Math.min(h1.text("pW" + this.value).width(),w));
            }
        },
        "keypress" : function(event) {
            var key = event.keyCode || event.which;
            if(key == 13) { return false; }
        }
    })
).siblings(".jstree-rename-input");

最初の行は、LI 要素である obj の最初のアンカー要素の後に入力オブジェクトを追加するように変更されました。最後の行は、クラス .jstree-rename-input を持つすべての兄弟を返すように変更されました。

また、input と obj の絶対位置を削除しました。

于 2012-09-06T19:22:52.480 に答える