我想在脚本中替换一些“this”。
$(this).find('option').each(function() {
$(this).hide();
})
是否有可能只替换外部的 this,或者只替换不在功能块内的“this”?我的想法行不通...
.replace(/([^{])\bthis\b([^}])/gm, $1replacement$2)
附录:第一个代码作为字符串处理,而不是 javascript!我正在寻找一个正则表达式来仅替换外部的“this”。
我想在脚本中替换一些“this”。
$(this).find('option').each(function() {
$(this).hide();
})
是否有可能只替换外部的 this,或者只替换不在功能块内的“this”?我的想法行不通...
.replace(/([^{])\bthis\b([^}])/gm, $1replacement$2)
附录:第一个代码作为字符串处理,而不是 javascript!我正在寻找一个正则表达式来仅替换外部的“this”。
如果我正确理解您的问题,您希望$(this)
从函数中引用变量,但是该变量会更改为函数的本地范围。因此,在函数中,$(this)
will 指的是您当前正在迭代的项目。
$(this)
在输入函数之前,您需要缓存对象的范围。
var cached_this = $(this);
$(this).find('option').each(function() {
cached_this.hide();
})
现在,您可以$(this)
使用变量从不同范围内访问外部的cached_this
值。
在这种情况下,这是一个对象。它不是您可以替换的字符串。您可以指定另一个值,但这样的替换将不起作用。
例如,如果您只想替换某些 div,只需更改 jQuery 选择器以选择具有特定类的那些,或父 div 的子元素。
您可以尝试使用call。由于此功能,您可以替换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);
区分“外部”和“内部”文本的方法是,对于内部,下一个大括号是右括号,它关闭了它的块。
因此,使用否定前瞻this
在块内排除:
str = str.replace(/\bthis\b(?![^{]*\})/gs, replacement);
还要注意替换术语的简化,因为匹配只是目标文本“this”。
查看此正则表达式工作的现场演示。