javascript - 如何在另一个函数中引用父元素?
问题描述
我还在习惯 ES6(并不是说我是 ES5 的专家),promise 的概念有点让我难堪。
(很抱歉,我不能在工作中使用 JSFiddle。)
我有一个事件侦听器,在单击时,它正在检索网页(HTML)。我正在使用 jQuery 的ajax
方法进行拉动。我的目标是在拉取的网页中查找值时更改样式(现在为颜色)。
$("a").each(function(index) {
this.addEventListener("click", function(evt) {
$.ajax(this.href)
.done(function(html) {
var int1 = parseInt($($.parseHTML(html)).find("int1").text());
if (int1 > 0) {
this.style.color = "blue"; // this 'this' doesn't refer to the anchor. It refers to the function I think
}
}
});
});
});
(我想我关闭了所有的括号)
我试过.then()
之后做,.done()
但我遇到了同样的问题。
有没有办法引用从done
函数内部启动 ajax 调用的锚点,或者有更好的方法来做到这一点?
解决方案
有两种方法可以做你想做的事:
第一种方法是缓冲,这样你就可以设置一个外部范围变量(缓冲区),它可以从内部范围访问。
$("a").each(function(index) {
this.addEventListener("click", function(evt) {
var that = evt.target; // or "this"
$.ajax(this.href)
.done(function(html) {
var int1 = parseInt($($.parseHTML(html)).find("int1").text());
if (int1 > 0) {
that.style.color = "blue";
}
}
});
});
});
第二种方式是代理,通过这种方式,您可以将this
关键字的上下文设置为您想要的任何内容。
$("a").each(function(index) {
this.addEventListener("click", function(evt) {
$.ajax(this.href)
.done($.proxy(function(html) {
var int1 = parseInt($($.parseHTML(html)).find("int1").text());
if (int1 > 0) {
this.style.color = "blue";
}
}, this);
});
});
});
推荐阅读
- node.js - Mongo Aggregate 使用 $geonear 和子文档表
- csv - 来自 encoding/csv pkg 的写入函数停止写入 csv 文件
- java - Java中的IdentityHashMap源代码中的retryAfterResize:for(;;)语法是什么意思
- c++ - c++ 整数溢出,尽管使用无符号整数和模运算
- python - 笔记本电脑与 GPU 机器上的深度模型训练?
- angular - Ngb等级最大值动态变化不反映在星星长度中
- android - 如果单元测试失败,SonarQube 不使用 Jacoco 报告
- security - 如何在 https 请求中使用 http 请求?
- javascript - VueJS - 设置 CSS 类来回答问题
- python-3.x - 如何以列表形式查看 GUI 上的 EXIF 数据?