我正在尝试解决这个问题:http://jqexercise.droppages.com/#page_0029_
我编写了以下代码并且工作正常。
(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);
}) ();
我有以下问题,
1)我不明白什么是" $&" in" $&" .blink()," $&" .bold()和" $&" .strike()
2)是否闪烁,加粗并触发jQueryUI方法?
答案 0 :(得分:4)
这些不是jQuery方法。 jQuery中的所有内容都是$.funcName()
形式的函数或者对jQuery对象进行操作的方法,例如: $(something).methodName()
。
这些是String
类的常规Javascript方法:String.prototype.blink
,String.prototype.bold
,String.prototype.strike
。他们只是用适当的HTML元素包装他们的参数。但是,它们已被弃用,因为最近使用CSS而不是<blink>
之类的旧标记,因此您不应该使用它们。
"$&"
是.replace()
方法的一项功能,它会自动替换为原始匹配元素。它在使用正则表达式时非常有用,因为您不知道与模式匹配的确切字符串。
您对该问题的解决方案看起来不会正常运行。它假定每个单词都在其自己的范围内,并且bold
位于第一个范围内,strike
位于第二个范围内,blink
位于第三个范围内。练习的目的是在DIV中找到他们所处的单词,并在该单词周围添加适当的样式。
答案 1 :(得分:1)
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>
。
对于它的价值,虽然接受的答案较短,但我发现你的答案更加优雅,因为它易于理解,结果一致,并且基于标准。也就是说,@ Barmar对其所做的假设提出了一些有效的担忧,因此,它在一般情况下是有用的。
答案 2 :(得分:0)
这些是不推荐使用的方法,用于将字符串包装在某个元素中。
String.prototype.blink
显示它是一种原生方法。
您可以在此处查看: