2011-12-21 9 views
2

jQuery UIで行が必要な場合ソート可能なのは、cansortクラスの場合のみソート可能です。私はそれをcancel: ':not(.cansort)'に設定しましたが、cansortクラスを持つ行を含め、何かを並べ替えることはできません。jQuery UI Sortableの 'cancel'プロパティでネガティブセレクタが動作しないのはなぜですか?

私は明示的に無効クラスを追加することができます知っているが、私は他の目的にcansortクラスを使用するので、それは私が私が無効になったクラスを削除し、cansortクラスを追加する必要がありますソート可能な何かをした各時間を意味します。私はソート可能なものを切り替えるたびにクラスを追加したり削除したりする必要はありません。

すべての要素をソート可能にすることができ、私は動的にのみオンとcansortクラスを使用してオフに切り替えるので、私はitemsプロパティでソート可能な何を制限する必要はありません。

答えて

1

この理由はcancelオプションがui.mouseウィジェット(いくつかのjQueryUIウィジェットでマウスイベントを処理するために使用されるウィジェット)によって処理されるためです。 this line of codeをチェックアウト:

elIsCancel = (typeof this.options.cancel == "string" 
    && event.target.nodeName ? 
     $(event.target).closest(this.options.cancel).length : false); 

はこれが意味することは、あなたのセレクタがmousedown EDは上にあった要素のclosestで実行されることをです。だからli.cansortソート可能な項目を取ることができます。すべてのソート可能なli Sの親ul.cansortクラスを持っていないので、これは常に1の長さを返します

$("li.cansort").closest(":not(.cansort)").length; 

:それは次のようになりますjQueryのセレクタを生成します。これは、その種のセレクタでは、並べ替えは、常にキャンセルされることを意味します。 (liからcancelセレクタを削除してみてください)

http://jsfiddle.net/7hSnc/:ここ

cancel: "li:not(.cansort)" 

例です:あなたは自分のcancelセレクタ内のタグ名を含める場合

幸運なことに、これは周りを取得するのは簡単です

+0

ありがとうございました...その動作を説明するので、私はあなたにポイントを授与しようとしています。私の問題は、私はソート可能なdiv要素を使用している、彼らは他のdivの中に入れ子になっています。したがって、最も近い関数は、常にcansortクラスがないものが見つかるまで、ネストされたdivのチェーンを上ります。あなたの例のフォークを使用して、別のリストの中にリストを入れ子にすると、それはどんなものも並べ替えることができません:http://jsfiddle.net/ymvZm/これはバグのようです。ソート可能なコンテナ内の要素に最も近い関数呼び出し。 –

+0

@RenderIn:問題ありません。あなたはセレクタで、 'li'がソート可能なコンテナの子であるという要件を追加することで、あなたが言及したことをシミュレートすることができます:http://jsfiddle.net/UKf7F/ –

+0

天才。ありがとうございました –

関連する問題