0

我正在尝试自动单击表格列的标题,以便表格在页面加载时自动排序。(表格是由 Confluence 插件注入的,因此我们无法轻松控制其内容、排序或 CSS。)

表中的每一个<th>都有class="sortableHeader"。使用 jQuery 获取标题项集:

$('th.sortableHeader')

返回预期的 jQuery 对象数组,如果我这样做,获取与数组中第一项关联的事件就可以正常工作:

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

对象 {mousedown: Array[1], mouseup: Array[1]} mousedown: Array[1] mouseup: Array[1] 原型:对象

当然我不能找.trigger()那个人,因为他不是 jQuery 对象。因此,我尝试使用.first()or获得相同的对象(我认为) .slice(0,1),但这就是事情变得奇怪的地方:

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

不明确的

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

不明确的

我本来希望底部的两个产生与第一个相同的结果。有人可以解释为什么事件没有出现吗?(显然,如果事件没有出现,那么我就不能出现.trigger()!)

4

2 回答 2

1

为什么不等待您的插件完成加载,然后在您想要的任何元素上触发您想要的任何事件?

这将选择所有具有 sortableHeader 类的元素,然后过滤掉除第一个元素之外的所有元素。这将返回一个 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 回答