1

假设您是 Apple……并且在整个站点范围内,您都希望 iPod 的每个实例始终保持适当的外壳和结构以保留品牌。我对一家根本不是苹果但面临相同品牌挑战的公司也有类似的问题。

因此,即使有人在运行该站点的 CMS 中键入 IPOD 或 ipod 或 iPod,它也会始终正确显示为 iPod

即使标题上的文本转换 CSS 使所有内容都像IPOD ETC ETC 一样大写,它也会强制i 小写为iPOD ETC ETC。

即使有复数或变体,如 ipods、IPODAGE、iPoDdInG... 并且它的任何混蛋都会转换为适当的大小写 - iPods、iPodage、iPodding

我已经对在 jsfiddle 上找到的以下脚本进行了一些试验,但我运气不佳,尽管我通常对 js 相当陌生。

http://jsfiddle.net/x9BSn/2/

我已经为站点中的许多其他内容引入了 jquery,因此我可以很好地使用它。

4

2 回答 2

1

这是(我相信)一个工作版本:http: //jsfiddle.net/x9BSn/11/

$.fn.changeWord = function (str, className) {
    var regStr = str + "(?=(?:[^\>]|\<[^\<]*\>)*$)";
    var regex = new RegExp(regStr, "gi");
    var txt = this.html();
    txt = txt.replace(regex, function(matched) {
            return "<span class='" + className + "'>" + str+ "</span>";
    });
    this.html(txt);
};

$('#myDiv').changeWord('specialWord', 'sw');

它将所有str未包含在标记 ( < ... >)中的 (case invariant) 实例替换为str(with the desired case)。

因此,如果您希望它是“SpecialWorD”,您可以通过以下方式实现:

$('#myDiv').changeWord('SpEcialWorD', 'sw');

如此处所示:http: //jsfiddle.net/x9BSn/13/

然后,您可以使用一些像这样的 css 添加到该内容:

.sw:after{
    content: "TM";
    vertical-align:super;
    font-size:.5em;
}
于 2012-09-12T19:19:27.720 回答
0

只是稍微修改Shmiddty了一下解决方案

$.fn.changeWord = function (str, className) {
    var regex = new RegExp(str, "gi");
    return this.each(function () {
        this.innerHTML = this.innerHTML.replace(new RegExp('(' + str+ '(?=(?:[^\>]|\<[^\<]*\>)*$))', 'gi'), "<span class='"+className+"'>$1</span>");
    });
};

$('#myDiv').changeWord('specialWord', 'sw');

​演示

于 2012-09-12T19:56:46.430 回答