【发布时间】:2017-04-27 15:27:15
【问题描述】:
有没有办法检测 jQuery 何时在文档上的元素中找到。比如我有一个函数:
function filter(jObject) {
alert('Did something wonderful');
console.log(jObject); // jQueryObject
}
我希望过滤器将自己附加到每个 jQuery 对象并在 $() 被触发时调用。所以:
<div id="divElement">A Dummy</div>
<script>
$('#divElement'); // Will trigger filter() and alert will popup.
// Console will print out the jQuery Object above.
</script>
我为什么要这样做?假设我去
document.getElementById('divElement').controller = new function() { ... };
$('#divElement').controller; // This is undefined.
因此我需要编写类似 $.fn.checkExtendedProperty = function();并在每次调用 $ 时触发它以查找 jQuery 遗漏的那些属性。 (不修改 jquery.js 文件本身。出于明显的原因,我宁愿不篡改它。)
我发现了一个有趣的 hack,它很有效。还不确定这意味着什么。
$$ = $;
$ = function(mix) {
var jObj = $$(mix);
jObj = checkExtendedProperty(jObj); // Binding Extended Property
return jObj;
};
function checkExtendedProperty(jObj) { ... }
// Copying all References.
for( var i in $$ ) { $[i] = $$[i]; }
如果有人知道使用 jQuery 原生函数或某种插件挂钩的更好方法,那将非常有帮助。
【问题讨论】:
-
只需从
document.ready处理程序中调用filter(),尽管老实说这听起来像是一个非常XY 的问题。您究竟需要实现什么,因为这听起来像是一个不必要的复杂解决方案。 -
实际上不,你永远不想这样做“我希望过滤器将自己附加到每个 jQuery 对象并在 $() 被触发时调用”,除非你想用大量致电
filter。 -
@Noobit 这没有任何意义。
-
$('#divElement')[0].controller(): jsfiddle.net/9vv8a9ce 虽然请注意,首先将自己的属性添加到 Element 对象是一个坏主意。 -
我不清楚您真正要解决的具体问题是什么。我没有任何细节的直觉是目前的方法不是很好。
标签: javascript jquery plugins