我想更改委派活动的“即时”选择器。
例如,
我使用此HTML:
<div id="div1">DIV1</div>
<div id="div2">DIV2</div>
<textarea id="result"></textarea>
我为所有DIV 委派点击事件:
$(document).on("click", "div", function () {
$("#result").append(this.id + ' DIV click\r\n');
});
稍后,我需要 取消绑定特定的DIV 。我可以绑定一个新的委托事件,排除这个特定的DIV并取消绑定以前的委托事件。但是,在我的情况下,我想保留以前的事件,只是更改此事件的选择器,这意味着,即时更改委派事件的event.selector
。
这是 事件 :
var delegatedEvent = $._data(document, "events").click;
通过定位 ID属性 (类等等),尝试 排除DIV 有效,我可以使用例如排除#div2
:
delegatedEvent[0].selector += ":not(#div2)"; // => selector == 'div:not(#div2)'
出于某种原因,我无法使用特定属性定位元素,我需要 使用元素索引 :
var indexDiv2 = $(delegatedEvent[0].selector).index($("#div2")); // => 1
现在尝试使用 索引排除#div2不起作用 :
delegatedEvent[0].selector += ":not(:eq("+indexDiv2 +"))"; // => selector == 'div:not(:eq(1))'
看起来匹配的集重新评估(???),如果我使用#div1
index(0) ,这将 排除所有DIV 。
我被困在这里,需要使用索引来定位特定的DIV,但不能用它来修改委托的事件选择器。
知道如何解决此问题或任何已知原因造成这种意外行为吗?
PS:我可以使用自定义data-*
属性(数据索引),但仍然想知道为什么使用:eq()
不起作用...
答案 0 :(得分:1)
为什么不用动态类来处理它?</ p>
$(document).on("click", "div:not(.exclude)", function () {
$("#result").append(this.id + ' DIV click\r\n');
});
只需将类exclude
添加到您想要的元素中?如果你想要它。