为什么当我在单独的函数中使用 $(this) 并在 .each() 中调用它时,它不起作用
Why when I use $(this) in a separate function and I call it inside a .each() it doesn't work?
我试图制作一个干净的jQuery代码,我把我所有的东西都放在一个函数中,我在"each"中调用。问题是没有任何反应,并且在控制台中没有出现任何错误。
这是一个示例代码:
$(function() {
$('.myElement').each(function() {
if($(this).children()) {
myFunction();
} else {
myFunction('.myOtherElement');
}
});
});
function myFunction(selector) {
if(!selector) {
$(this).html('Finish');
} else {
$(this).find(selector).html('Finish');
}
}
如果我将我的函数内容放在 .each 中,它可以工作,但在单独的函数中不起作用,我认为它应该可以工作。为什么这段代码不起作用?
在这种情况下,执行上下文(this)是不同的,您可以使用.call()来应用它
$(function() {
$('.myElement').each(function() {
if($(this).children()) {
myFunction.call(this);
} else {
myFunction.call(this, '.myOtherElement');
}
});
});
问题是你的情况下this
不是你在.each
里面的对象,而是window
的对象。要将this
绑定为 jquery 对象,而不必每次都应用上下文,请使用 call
。你可以把它定义为一个jquery插件函数
(function($){
$.fn.myFunction = function (selector) {
if(!selector) {
this.html('Finish'); //notice this here refer to jquery object instead of $(this)
} else {
this.find(selector).html('Finish');
}
}
})(jQuery);
$(function() {
$('.myElement').each(function() {
if($(this).children()) {
$(this).myFunction();
} else {
$(this).myFunction('.myOtherElement');
}
});
});
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 使用jQuery动态添加表并在其中动态添加行
- 遍历类元素数组,并在jquery中选择同级元素
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- this.router在AngularJS 2中未定义
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何使用JS禁用表行,并在MYSQL中插入所选选项
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- OpenLayers在悬停时高亮显示功能,并在单击时选择
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- 获取屏幕截图并在电子邮件中发送的按钮
- CSS/HTML:更改文本的值并在悬停时从中心展开
- 使用php脚本验证访问者的年龄,并在不刷新的情况下根据结果加载iframe
- 为什么当我在单独的函数中使用 $(this) 并在 .each() 中调用它时,它不起作用
- 需要JS并在模块中使用this.id
- 是否需要同时缓存'this'并在backbone.js中设置它的上下文