我想将一个字母(我们称之为“n”)更改为不同的颜色,比如黄色。我希望在所有页面以及所有字体和大小上完成此操作。
我找到了 Greasemonkey 的这个脚本,我认为可以修改它来做我想做的事。
我尝试用 替换字母“n” "<p style="color:#FFB90F">n</p>"
,但无济于事。它只是被插入到页面中而不被评估为 CSS。
我怎样才能做到这一点?我希望能够指定字母和颜色列表。
我想将一个字母(我们称之为“n”)更改为不同的颜色,比如黄色。我希望在所有页面以及所有字体和大小上完成此操作。
我找到了 Greasemonkey 的这个脚本,我认为可以修改它来做我想做的事。
我尝试用 替换字母“n” "<p style="color:#FFB90F">n</p>"
,但无济于事。它只是被插入到页面中而不被评估为 CSS。
我怎样才能做到这一点?我希望能够指定字母和颜色列表。
这是一个常见的问题,请注意使用.innerHTML
or的答案.html()
。这些将破坏页面的 HTML(用无效字符串替换部分标签)和/或页面功能可能需要的孤立事件处理程序。
一个健壮的解决方案将使用 DOM 技术来仅修改文本节点。
下面的完整脚本使用了标准的wrapTextWithElement()
函数。
您可以在此 jsFiddle中查看正在运行的代码。
// ==UserScript==
// @name Wrapping/Coloring letters in an HTML page
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant GM_addStyle
// ==/UserScript==
//-- Use CSS, *not* inline styles to color/style things
GM_addStyle ( " \
span.coloredLetter { \
background: yellow; \
} \
" );
var letI_Wrapper = new wrapTextWithElement ('i', '<span class="coloredLetter">');
letI_Wrapper.wrap (document.body); // Here we wrap everything.
function wrapTextWithElement (targText, elemToWrapWith, bCaseSensitive) {
var self = this;
var bCaseSensitive = bCaseSensitive || false;
self.targRegEx = new RegExp ("(" + targText + ")", bCaseSensitive ? "" : "i");
self.elemToWrapWith = elemToWrapWith;
self.wrap = function (node) {
$(node).contents ().each ( function () {
if (this.nodeType === Node.ELEMENT_NODE) {
self.wrap (this);
}
else if (this.nodeType === Node.TEXT_NODE) {
var ndText = this.nodeValue;
if (self.targRegEx.test (ndText) ) {
var replaceNodes = $.map (
ndText.split (self.targRegEx),
function (phrase) {
if (self.targRegEx.test (phrase) ) {
/* The $(HTML, props) form does not work if the HTML
has attributes
var wrapped = $(self.elemToWrapWith, {text: phrase} );
*/
var wrapped = $(self.elemToWrapWith).text (phrase);
return wrapped.get ();
}
else {
if (phrase == "")
return null;
else
return document.createTextNode (phrase)
}
}
);
$(this).replaceWith (replaceNodes);
}
}
} );
};
}
我知道这不完全是您的问题,但也许它可以帮助您http://letteringjs.com/。每个字母都有一个自己span
的一个类。
你可以使用 jQuery 并尝试这样的事情:
$('p:contains(n)').each(function() {
$(this).html(
$(this).html().replace('n', '<span style="color:#F00;">n</span>')
);
});
这只会在任何 p 标签中找到字母“n”,因此您需要进行调整以满足您的需求。
#F00
red
以十六进制表示颜色