此代码来自jquery.highlight。它在第3行使用了弃用的'with'语句,我一直试图弄清楚如何重构它并没有成功。我对javascript或jQuery解决方案感到满意。
jQuery.fn.removeHighlight = function() {
return this.find("span.highlight").each(function() {
with (this.parentNode) {
replaceChild(this.firstChild, this);
normalize();
}
}).end();
};
这是我的尝试,但它在标签上窒息,并且可能是已经包含在“未找到节点”错误的元素中的任何内容。
jQuery.fn.removeHighlight = function () {
return this.find("span.highlight").each(function () {
var el = this.parentNode;
el.replaceChild(el.firstElementChild.firstChild, el);
el.normalize();
}).end();
};
答案 0 :(得分:2)
this
不等于您引入的el
,即this.parentNode
。 with
语句仅将对象的属性(和方法)作为本地绑定引入,它不会影响this
。你的代码应该是
var el = this.parentNode;
el.replaceChild(this.firstChild, this);
el.normalize();
或只是
this.parentNode.replaceChild(this.firstChild, this);
this.parentNode.normalize();
不知道你从.firstElementChild
那里得到了什么。
答案 1 :(得分:0)
您将el
定义为原始DOM对象。您需要将其定义为jQuery对象或稍后使用它:
var el = $(this).parent();
或
var el = this.parentNode;
$(el).doStuff();