0

ページの読み込み時にテーブルが自動的にソートされるように、テーブル列のヘッダーのクリックを自動化しようとしています。(テーブルは Confluence プラグインによって挿入されるため、そのコンテンツ、並べ替え、または CSS を簡単に制御することはできません。)

<th>表のそれぞれに がありますclass="sortableHeader"。jQuery を使用して一連のヘッダー項目を取得します。

$('th.sortableHeader')

期待される jQuery オブジェクトの配列を返し、配列の最初の項目に関連付けられたイベントを取得するには、次のようにすると問題なく動作します。

$._data( $('th.sortableHeader')[0], "events")

Object {mousedown: Array[1], mouseup: Array[1]} mousedown: Array[1] mouseup: Array[1] proto : Object

もちろん.trigger()、彼は jQuery オブジェクトではないので、その人を呼び出すことはできません。だから私は同じオブジェクトを取得しようとしました(私は思った).first()orを使用し.slice(0,1)ましたが、それは物事が奇妙になるところです:

$._data( $('th.sortableHeader').first(), "events")

未定義

$._data( $('th.sortableHeader').slice(0,1), "events")

未定義

下の 2 つは最初と同じ結果になると予想していました。イベントが表示されない理由を誰か説明できますか? (明らかに、イベントが表示されない場合は表示できません.trigger()!)

4

2 に答える 2

1

プラグインのロードが完了するのを待ってから、必要な要素で必要なイベントをトリガーしてみませんか?

これにより、 sortableHeader クラスを持つすべての th 要素が選択され、最初の要素以外がすべて除外されます。これは jQuery オブジェクトを返します。

$('th.sortableHeader').first().trigger('click');

また

これは同じことを行いますが、DOM オブジェクトを返すため、jquery オブジェクトにするために、jQuery セレクターでラップできます。

var mySelection = $('th.sortableHeader')[0];
$(mySelection).trigger('click');

http://jsfiddle.net/colbycallahan/uJusL/

于 2013-10-31T21:40:06.847 に答える
1
// trigger mouseup on all matching elements
$('th.sortableHeader').trigger('mouseup');

// trigger mouseup on first matching element
$('th.sortableHeader').first().trigger('mouseup'); 

イベント (およびハンドラー) を見つけるには、既に解決済みです。

$._data( $('th.sortableHeader')[0], "events");

これはjQueryに保存されたイベントオブジェクトを返しますが、それらをトリガーするために「必要」ではありません.jQueryは.trigger().

本当に面倒になりたい場合は、次のようなことを試してください。

var ev = $._data( $('th.sortableHeader')[0], "events");
// ev is now an object of events
ev.mouseup.forEach(function(obj) {
    obj.handler();
});

デモ: http://jsfiddle.net/YECr5/

于 2013-10-31T21:47:51.640 に答える