如何在集合中的项上触发 jQuery 事件(意外的 jQuery 结果来自 $._data() 与集合的第一个元素)
How to Trigger jQuery event on item in set (unexpected jQuery results from $._data() with first element of set)
我正在尝试自动单击表列的标题,以便表在页面加载时自动排序。 (该表是由 Confluence 插件注入的,因此我们无法轻松控制其内容、排序或 CSS。
表中的每个<th>
都有class="sortableHeader"
。 使用 jQuery 获取标头项集:
$('th.sortableHeader')
返回预期的 jQuery 对象数组,如果我这样做,获取与数组中第一项关联的事件就可以正常工作:
$._data( $('th.sortableHeader')[0], "events")
对象 {mousedown: Array[1], mouseup: Array[1]}鼠标向下: 数组[1]鼠标向上:数组[1]原型:对象
当然,我不能对那个家伙说.trigger()
,因为他不是jQuery对象。 所以我试图使用.first()
或.slice(0,1)
来获取相同的对象(我认为),但这就是事情变得奇怪的地方:
$._data( $('th.sortableHeader').first(), "events")
定义
$._data( $('th.sortableHeader').slice(0,1), "events")
定义
我本以为底部的两个会产生与第一个相同的结果。 有人可以解释为什么事件没有出现吗? (显然,如果事件没有出现,那么我就无法.trigger()
它们!
// 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/
为什么不等待您的插件完成加载,然后在您想要的任何元素上触发您想要的事件?
这将使用 sortableHeader 类选择所有元素,然后过滤掉除第一个元素之外的所有元素。 这将返回一个 jQuery 对象。
$('th.sortableHeader').first().trigger('click');
或
这样做相同,但返回一个 DOM 对象,因此要使其成为 jquery 对象,您可以将其包装在 jQuery 选择器中。
var mySelection = $('th.sortableHeader')[0];
$(mySelection).trigger('click');
http://jsfiddle.net/colbycallahan/uJusL/
- 如何获取jQuery集合中的第k个元素..作为JQUERY元素
- jquery集合元素悬停
- 包装jQuery集合并附加到类
- 检查元素是否在 jquery 集合中
- 使用 jQuery 延迟对象以串行方式处理 jQuery 集合/数组
- jQuery集合、功能和组织
- 如何在jquery集合日期中传递变量
- JQuery集合<选择>属性值的索引
- 如何更改匹配的jQuery集合中元素的顺序
- 检查元素是否存在于jQuery集合中
- 检查jQuery集合中的任何输入是否有值
- 循环使用jQuery集合并使用jQuery进行包装
- 如何从一个共享属性的jQuery集合中获取一个属性数组
- 创建jQuery集合的更好方法
- 从 jQuery 集合中删除注释和文本节点
- Jquery集合中字符的长度
- 迭代jQuery集合,而不必重新构建jQuery对象
- 使用array设置jQuery集合的值
- 操作jquery集合
- 在jQuery集合上使用Zepto方法