【问题标题】:Detect when jQuery found an element检测 jQuery 何时找到一个元素
【发布时间】: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


【解决方案1】:

对这个问题唯一有意义的解决方案是停止将函数作为属性添加到元素中,并创建一个与您的模块交互的 jQuery 方法。

// setter/general function call (looks at all selected elements)
$.fn.controller = function (obj) {
  return this.each(function () {
    myModule.controller(this, obj);
  });
};
// getter (only looks at first selected element)
$.fn.getController = function () {
  return myModule.getController(this[0]);
};

不要给元素添加函数,而是给它们一个类,表明它们与您的模块相关联,并且您需要能够通过模块中的记录识别它的任何信息都应该存储在数据属性中。

在定义上述方法之前,您总是可以检查是否包含 jquery,以便您的代码在使用和不使用 jquery 时都可以工作。

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多