gpt4 book ai didi

javascript - 为 1.8 Sizzle 重写 jQuery 表达式/选择器

转载 作者:行者123 更新时间:2023-11-29 15:44:43 29 4
gpt4 key购买 nike

不久前我问了一个关于防止事件重复绑定(bind)的问题 [here]我正在尝试更新 1.8 的表达式,但无法让它工作:

原文:

$.expr[':'].hasEvent = function(obj, idx, meta, stack) {
return ($._data((obj), 'events') != undefined && $_.data((obj), 'events')[meta[3]] != undefined);
};

我失败的尝试:

jQuery.expr[':'].hasEvent = $.expr.createPseudo(function( selector, context ) {
return function(elem) {
return ($._data((elem), 'events') != undefined && $_.data((elem), 'events').selector != undefined);
}
});

用法:

$(object).not(":hasEvent(myEvent)").on("myEvent", onMyEvent);

这个有效:

if (!$._data((object), 'events') || !$._data((object), 'events').myEvent) {
$(object).on("myEvent", onMyEvent);
}

最佳答案

1) 您的代码有错别字:$_.data 而不是 $._data

2) 您不能使用点 selector 参数用作对象属性。 这是字符串,如果您想检查对象是否具有这样的属性名称,您应该使用方括号 obj[selector]

因此,此表达式的固定代码如下所示:

jQuery.expr[':'].hasEvent = $.expr.createPseudo(function( selector, context ) {
return function(elem) {
return ($._data(elem, 'events') != undefined && $._data(elem, 'events')[selector] != undefined);
}
});

可用的 JSFiddle here .

关于javascript - 为 1.8 Sizzle 重写 jQuery 表达式/选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528977/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com