我正在努力解决一个问题问题。
我编写了以下代码,它运行得很好:
(function () {
if($('#target:contains("bold")')) {
$('#target span:first').css('font-weight','bold');
}
if($('#target:contains("strike")')) {
$('#target span').eq(1).css('text-decoration','line-through');
}
if($('#target:contains("blink")')) {
$('#target span:last').css('text-decoration','blink');
}
}) ();他们的解决办法如下:
(function () {
var target = $('#target');
var html = target.html();
html = html.replace('blink',"$&".blink());
html = html.replace('bold',"$&".bold());
html = html.replace('strike',"$&".strike());
target.html(html);
}) ();我有以下问题:
"$&"在"$&".blink(),"$&".bold()和"$&".strike()中是什么,blink、bold和strike jQuery UI方法吗?发布于 2015-05-22 00:27:40
这些不是jQuery方法。jQuery中的所有内容要么是表单$.funcName()的函数,要么是在jQuery对象上操作的方法,例如$(something).methodName()。
这些是String类的常规Javascript方法:String.prototype.blink、String.prototype.bold、String.prototype.strike。他们只是用适当的HTML元素来包装他们的参数。然而,它们已经被废弃了,因为CSS现在是首选的,而不是像<blink>这样的旧标签,所以您不应该使用它们。
"$&"是.replace()方法的一个特性,它被自动替换为原始匹配元素。它在使用正则表达式时非常有用,因为您不知道与模式匹配的确切字符串。
你对这个问题的解决方案看上去不太合适。它假设每个单词都在自己的跨度中,而且bold在第一个跨度,strike在第二个跨度,blink在第三个跨度中。该练习的目的是在设计资料集中的任何地方找到词语,并把适当的风格围绕在这个词周围。
发布于 2015-05-22 00:33:35
JavaScript replace()方法使用正则表达式。$&语法是匹配表达式的缩写;因此它将分别表示blink、bold和strike。
因为@Daniel A. White在他的答复中提到、blink()、bold()和strike()是从string.prototype中删除的用于在标记中包装源字符串的方法。所使用的确切标记将因浏览器而异;例如,可以返回<b>bold</b>、另一个<strong>bold</strong>和另一个<span style="font-weight: bold">bold</span>。
尽管@Barmr的公认答案更短,但我觉得您的更优雅,因为它易于理解,结果一致,并且基于标准。也就是说,@Barmar提出了合理的关切是关于它所作的假设的,因此,它在一般情况下是有用的。
https://stackoverflow.com/questions/30386468
复制相似问题