0

私はCKEditorでリッチテキストを作成し、結果のhtmlを順序付けられていないリスト(ul)内のli内に含まれるdivに埋め込みます。jQueryとさまざまな比較を使用してliを並べ替えます。リッチテキスト自体にulまたはolが含まれている場合(CKEditorで許可されます)、ソートはFFFirebugのメッセージで失敗します。

"HierarchyRequestError:ノードを行の階層の指定されたポイントに挿入できません"

そして、jQueryからこのコードを引用します:

append: function() {
    return this.domManip(arguments, true, function( elem ) {
        if ( this.nodeType === 1 || this.nodeType === 11 ) {
            this.appendChild( elem );
        }
    });
}, 

HTMLにulまたはolが含まれていない場合、ソートは正常に機能します。

HTMLコンテキストは次のとおりです。

各liが「RetailerSearchSectionLine」に分類され、リッチテキストをhtmlとして含むdivが含まれている順序付けられていないリスト。

失敗するjQueryソート関数の1つを次に示します。

var TransferArray = $(".RetailerSearchSectionLine").toArray().sort(function(a, b)
{
    var distance1 = $(a).data("DistanceFromReferenceLocation");
    var distance2 = $(b).data("DistanceFromReferenceLocation");
    return (distance1 - distance2);
});
$("#RetailerSearchSectionBody ul").append(TransferArray);

助言がありますか?配列のキーを並べ替えて、並べ替えた結果に基づいてulを再配置することを考えています。しかし、それは多くの作業であり、リスト内のリストで見られない基本的な問題がある場合、実際には機能しない可能性があります。

4

1 に答える 1

1

この線

$("#RetailerSearchSectionBody ul").append(TransferArray);

$("#RetailerSearchSectionBody ul")一意の要素ではなくコレクション(子ULを含む)を選択する可能性があるため、正しく表示されません。

以下は、一意の要素を安全に選択する必要があります。

$("#RetailerSearchSectionBody").children("ul").eq(0).append(TransferArray);

それが機能しない場合は、次のように、本物の配列に分割するのではなく、元のjQueryでラップされた要素に対して並べ替えを実行する方がほぼ間違いなく正常です。

Array.prototype.sort.call($(".RetailerSearchSectionLine"), function(a, b) {
    var distance1 = $(a).data("DistanceFromReferenceLocation");
    var distance2 = $(b).data("DistanceFromReferenceLocation");
    return (distance1 - distance2);
}).each(function(i, item) {
    $("#RetailerSearchSectionBody").children("ul").eq(0).append(item);
});

ソート自体は問題ではないように見えるので、どちらのアプローチを採用するかはおそらく学術的です。とにかく、これはあなたが試すことができる何か他のものです。

于 2012-11-28T22:55:34.183 に答える