如何仅替换一些“this”外部函数

How can i replace some "this" only outside functions?

本文关键字:this 外部 函数 何仅 替换      更新时间:2023-09-26

我想替换脚本中的一些"this"。

$(this).find('option').each(function() {
    $(this).hide();
})
是否可以仅替换

外部的this,或者仅替换不在功能块内的"this"?我的想法行不通...

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

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

如果我

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

您需要

在输入函数之前缓存$(this)对象的作用域。

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

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

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

因此,使用负面展望来排除块中的this

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

另请注意替换术语的简化,因为匹配只是目标文本"this"。

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

在这种情况下,

这是一个对象。它不是您可以替换的字符串。您可以分配另一个值,但这样的替换将不起作用。

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

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

$(this).find('option').each(function() {
    // here this === replacement
    $(this).hide();
}.call(replacement))

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

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