【发布时间】:2012-10-29 18:53:10
【问题描述】:
目前我正在使用一个 Jquery 字符串来尝试在整个网站正文中定位一个特定的单词并向它添加一个类。因此,例如每次出现“Nike”一词时,它都会使其变为红色并在其末尾附加一个 TM。
我一直在使用它,但它只替换了内容中第一次出现的 Nike 作品,我不知道为什么它没有替换所有这些。
这里是示例:http://jsbin.com/ijufu3/21/
有什么想法吗?
【问题讨论】:
目前我正在使用一个 Jquery 字符串来尝试在整个网站正文中定位一个特定的单词并向它添加一个类。因此,例如每次出现“Nike”一词时,它都会使其变为红色并在其末尾附加一个 TM。
我一直在使用它,但它只替换了内容中第一次出现的 Nike 作品,我不知道为什么它没有替换所有这些。
这里是示例:http://jsbin.com/ijufu3/21/
有什么想法吗?
【问题讨论】:
试试这个/Nike/g
.replace 只会在第一次出现时执行。要继续搜索,您需要进行全局搜索。
$('p:contains(Nike)').each(function(){
$(this).html(
$(this).html().replace(/Nike/g,'<span class="fancy">Nike</span>')
);
});
【讨论】:
我的建议是:
$('body').html(
function(i,h){
return h.replace(/(Nike)/g,'<span class="nike tm">$1</span>');
});
加上以下 CSS:
.tm::after {
content: '™';
}
.nike {
color: red;
}
选择器被修改为您希望在其中找到单词的任何元素。
鉴于您可能需要定位未实现 ::after 伪元素/CSS 生成内容的浏览器,那么还有以下选项:
$('body').html(
function(i,h){
return h.replace(/(Nike)/g,'<span class="nike">$1™</span>');
});
其中省略了添加 tm 类并将该字符显式添加到返回的 HTML 字符串中。
这些方法之所以有效,是因为正则表达式允许使用 g(我认为是“全局”?)标志,它替换了 每次 遇到的匹配项(括号内的字符串) .但是,因为您正在查看 html 内容,这会带来nike 的任何类名本身也会被替换的风险,所以要非常,非常 em> 确保这个字符串不会出现在意想不到的地方(替换会导致问题)。
【讨论】: