替换javascript“with”语句

时间:2015-08-03 16:22:22

标签: javascript jquery

此代码来自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();
};

2 个答案:

答案 0 :(得分:2)

this不等于您引入的el,即this.parentNodewith语句仅将对象的属性(和方法)作为本地绑定引入,它不会影响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();