Javascript 如何在集合中的项上触发jQuery事件(集合的第一个元素来自$.\u data()的意外jQuery结果)
我正在尝试自动单击表格列的标题,以便表格在页面加载时自动排序。(该表由汇流插件注入,因此我们无法轻松控制其内容、排序或CSS。) 表中的每个Javascript 如何在集合中的项上触发jQuery事件(集合的第一个元素来自$.\u data()的意外jQuery结果),javascript,jquery,Javascript,Jquery,我正在尝试自动单击表格列的标题,以便表格在页面加载时自动排序。(该表由汇流插件注入,因此我们无法轻松控制其内容、排序或CSS。) 表中的每个都有class=“sortableHeader”。使用jQuery获取标题项集: $('th.sortableHeader') 返回预期的jQuery对象数组,如果我这样做,那么获取与数组中第一项相关联的事件就可以了: $._data( $('th.sortableHeader')[0], "events") 对象{mousedown:Array[1],
都有class=“sortableHeader”
。使用jQuery获取标题项集:
$('th.sortableHeader')
返回预期的jQuery对象数组,如果我这样做,那么获取与数组中第一项相关联的事件就可以了:
$._data( $('th.sortableHeader')[0], "events")
对象{mousedown:Array[1],mouseup:Array[1]}
mousedown:数组[1]
鼠标:数组[1]
原型:对象
当然我不能对那个家伙调用.trigger()
,因为他不是jQuery对象。因此,我尝试使用.first()
或.slice(0,1)
获取相同的对象(我认为),但这就是事情变得奇怪的地方:
$._data( $('th.sortableHeader').first(), "events")
未定义
未定义
我本以为倒数第二名会产生与第一名相同的结果。有人能解释为什么这些事件没有出现吗?(显然,如果事件没有显示,那么我就不能
.trigger()
触发它们!)为什么不等待插件加载完成,然后在您想要的元素上触发您想要的事件呢
这将使用sortableHeader类选择所有th元素,然后过滤掉除第一个元素以外的所有元素。这将返回一个jQuery对象
$('th.sortableHeader').first().trigger('click');
或
这与此相同,但会返回一个DOM对象,因此要使其成为jquery对象,可以将其包装在jquery选择器中
var mySelection = $('th.sortableHeader')[0];
$(mySelection).trigger('click');
要查找事件(和处理程序),您已经解决了以下问题:
$._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();
});
演示:我两个都试过了。第二个错误是因为[0]是DOM对象,而不是jQuery对象,所以您会得到“TypeError:[0]。触发器不是函数”。第一个似乎不起作用,我相信这是因为如果你问jQuery
.first()
的事件是什么,你会得到未定义的(参见我的操作)。$。\u(
需要一个dom节点。因此,.first
和.slice
将不起作用。您的第一次尝试成功了,这正是您所需要的。.trigger
与此有什么关系?从$.\u数据获取事件与触发事件无关……就是这样。谢谢。
$._data( $('th.sortableHeader')[0], "events");
var ev = $._data( $('th.sortableHeader')[0], "events");
// ev is now an object of events
ev.mouseup.forEach(function(obj) {
obj.handler();
});