【问题标题】:"This" is returning [object Window], not the element“This”返回 [object Window],而不是元素
【发布时间】:2023-03-30 04:36:01
【问题描述】:

我有这个简单的调试代码(还有更多,但这是精简版):

function calc(container) {
    console.log(container);
    return 100;
};

$(".replace").text(calc(this));

控制台只返回window,而不是元素。为什么是这样?有什么东西会阻止 jQuery/JavaScript 返回元素吗?

【问题讨论】:

  • 是的,this 在该范围内是 window

标签: javascript jquery html this


【解决方案1】:

在全局上下文中,this window

> this === window
true

你想要的大概是这样的:

var $replace = $(".replace");
$replace.text(calc($replace));

【讨论】:

  • 是的,我明白了;我的评论是针对在家玩的人:)
【解决方案2】:

因为calc 方法没有在元素的上下文中被调用,所以你需要使用类似

$(".replace").text(function(){
    return calc(this)
});

在这种情况下,calc 方法在回调方法中被调用,其中this 指的是当前元素。

演示:Fiddle

【讨论】:

  • 这会将文本替换为function (){ percentCalc(this); },并且不会记录任何内容,因为该函数没有运行。
  • 是的,接受的答案对我有用,但不是这个。奇怪。
  • @Ian 那么问题是你想用参数container 做什么?您是否尝试在其上调用任何 jquery 方法?
  • 好的,原来这是因为我使用的是 Scratchpad。当我不使用暂存器时它确实有效,并且更适合我的目的。
【解决方案3】:

this这里指的是窗口对象

$(".replace").text(calc(this));

你应该使用

$(".replace").text(function(){
    return calc(this); // here this refers to the current element with class replace
});

阅读this keyword

【讨论】:

  • 哈哈,太奇怪了,我今天午餐时才读到那个文档页面。
  • 这会将文本替换为 function (){ percentCalc(this); } 并且不记录任何内容,因为该函数没有运行。
【解决方案4】:

只是另一种选择,因为您正在寻找元素,只需使用您的函数引用本身作为text 的参数。

function calc() {
    console.log(this);
    return 100;
};

$(".replace").text(calc);

【讨论】:

    【解决方案5】:

    没错。

    因为当您调用该函数时,当前范围是窗口。

    如果要使用元素,请改用函数参数。

    参考jQuery set text

    【讨论】:

    • this 的值与作用域无关,它总是在当前执行上下文中解析(并且总是在进入执行上下文时设置)。
    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2017-04-11
    • 2014-07-31
    • 2018-03-20
    相关资源
    最近更新 更多