我想改变一个字母,让我们把它称为“n”,换成不同的颜色,让我们说黄色。我希望在所有页面以及所有字体和大小上完成此操作。
我找到了Greasemonkey的this script,我认为可以修改它来做我想要的。
我尝试用"<p style="color:#FFB90F">n</p>"
替换字母“n”,但无济于事。它只是插入页面而不被评估为CSS。
我该怎么做?我希望能够指定字母和颜色列表。
答案 0 :(得分:2)
这是一个常见问题,请注意使用.innerHTML
或.html()
的答案。这些将破坏页面的HTML(用无效字符串替换部分标签)和/或页面功能可能需要的孤立事件处理程序。
强大的解决方案将使用DOM技术仅修改文本节点。
以下完整脚本使用standard-ish wrapTextWithElement()
函数
您可以在this 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);
}
}
} );
};
}
答案 1 :(得分:0)
我知道这不是你的问题,但也许它可以帮助你http://letteringjs.com/。自己span
中的每个字母都有一个类。
答案 2 :(得分:0)
你可以使用jQuery并尝试这样的事情:
$('p:contains(n)').each(function() {
$(this).html(
$(this).html().replace('n', '<span style="color:#F00;">n</span>')
);
});
这只会在任何p标签中找到字母“n”,因此您需要根据自己的需要进行调整。
#F00
代表十六进制
red