1

我想在脚本中替换一些“this”。

$(this).find('option').each(function() {

    $(this).hide();
})

是否有可能只替换外部的 this,或者只替换不在功能块内的“this”?我的想法行不通...

.replace(/([^{])\bthis\b([^}])/gm, $1replacement$2)

附录:第一个代码作为字符串处理,而不是 javascript!我正在寻找一个正则表达式来仅替换外部的“this”。

4

6 回答 6

1

如果我正确理解您的问题,您希望$(this)从函数中引用变量,但是该变量会更改为函数的本地范围。因此,在函数中,$(this)will 指的是您当前正在迭代的项目。

$(this)在输入函数之前,您需要缓存对象的范围。

var cached_this = $(this);
$(this).find('option').each(function() {
    cached_this.hide();
})

现在,您可以$(this)使用变量从不同范围内访问外部的cached_this值。

于 2013-09-02T09:09:07.783 回答
0

在这种情况下,是一个对象。它不是您可以替换的字符串。您可以指定另一个值,但这样的替换将不起作用。

于 2013-09-02T09:07:28.957 回答
0

例如,如果您只想替换某些 div,只需更改 jQuery 选择器以选择具有特定类的那些,或父 div 的子元素。

于 2013-09-02T09:09:25.753 回答
0

您可以尝试使用call。由于此功能,您可以替换this对象:

$(this).find('option').each(function() {
    // here this === replacement
    $(this).hide();
}.call(replacement))
于 2013-09-02T09:17:57.077 回答
0

如果它在一个函数中,您可以this在调用它时通过为其分配不同的变量来“替换”它。

var func = function() {
    $(this).find('option').each(function() {
        $(this).hide();
    });
};

func.apply(annotherThis);
于 2013-09-02T09:18:52.960 回答
0

区分“外部”和“内部”文本的方法是,对于内部,下一个大括号是括号,它关闭了它的块。

因此,使用否定前瞻this在块内排除:

str = str.replace(/\bthis\b(?![^{]*\})/gs, replacement);

还要注意替换术语的简化,因为匹配只是目标文本“this”。

查看此正则表达式工作的现场演示

于 2013-09-04T03:55:26.130 回答