Javascript JS innerHTML.replace()行为

Javascript JS innerHTML.replace()行为,javascript,scriptish,Javascript,Scriptish,我试着用Scriptish制作一个JavaScript来代替论坛中烦人的字体。 代码本身工作正常,但执行也会杀死一个文本编辑器,这是不应该的。按钮和条还在,但是文本框不见了。使用的正则表达式在那里没有匹配项 document.body.innerHTML = document.body.innerHTML.replace(/font-family:georgia, serif/g, 'font-family:arial, tahoma'); 我试过document.body.innerHTML

我试着用Scriptish制作一个JavaScript来代替论坛中烦人的字体。 代码本身工作正常,但执行也会杀死一个文本编辑器,这是不应该的。按钮和条还在,但是文本框不见了。使用的正则表达式在那里没有匹配项

document.body.innerHTML = document.body.innerHTML.replace(/font-family:georgia, serif/g, 'font-family:arial, tahoma');
我试过
document.body.innerHTML=document.body.innerHTML它什么也不做,只是用自身替换主体。即使这样也会使编辑陷入困境。
我也试着改用WYSIWYG编辑器,但即使是那个编辑器也消失了

我不是那个网站的管理员,任何人都可以使用不需要的字体(有些人在每篇文章中都会用到)。我只是不想让它们出现在我的屏幕上

我的猜测是Scriptish会干扰网站的脚本编写,但我如何验证这一点

在JavaScript(IE8+)中可以使用。 除了高级jQuery过滤方法(甚至不是100%确定)之外,这个选择器实际上可以在jQuery和CSS中执行几乎任何操作

无论如何,如果你不想在你的屏幕上出现奇怪的字体,你可以这样做
document.querySelectorAll(“[font-family^=“serif-”]”)
-这意味着“查找属性以
serif-
开头的元素,从那里可以得到一个节点列表,您可以对其进行操作

有关属性选择器的完整文档:

摘自MDN

[attr] 表示属性名为attr的元素

[attr=value] 表示属性名为attr且其值正好为“value”的元素

[attr~=value] 表示属性名为attr的元素,其值是以空格分隔的单词列表,其中一个单词正好是“value”

[attr|=value] 表示属性名为attr的元素。其值可以完全为“value”,也可以以“value”开头,后跟“-”(U+002D)。它可用于语言子代码匹配

[attr^=value] 表示属性名为attr且其值以“value”为前缀的元素

[attr$=value] 表示属性名为attr且其值以“value”作为后缀的元素

[attr*=value] 表示属性名为attr的元素,其值至少包含一个字符串“value”作为子字符串

这些选择器在您的情况下应该很有用,将它们与
document.querySelectorAll(选择器)
结合使用,您会玩得很开心;)

编辑

因此,要在此处添加有关您需要执行的操作的额外细节:

  • 通过
    document.querySelectorAll()
  • 使用
    for
    构造循环集合中的元素
  • 在循环中,使用
    元素[i].style.fontfamine='newfamily'
    替换所有字体
获取有关更改样式的完整文档

您要做的是首先找到令人不快的元素,例如,带有恼人字体的元素。 如果它们的内联样式总是包含
字体系列
,这并不难

自制代码片段(未经测试) //获取内联[style]属性包含字体族的元素 var hatteringFontElements=document.querySelectorAll(“[style*=“font-family”]”)

//循环所有元素以替换字体
对于(变量i=0;i
有了皮特的暗示,我很快就找到了这个解决方案。 这将用您输入的内容覆盖所有用户定义的字体

var css = document.createElement("style");
css.type = "text/css";
css.innerHTML = "span[style] { font-family:arial, tahoma !important }";
document.body.appendChild(css);

感谢您的帮助。

您可以找到所有节点,并在循环中更改或删除字体系列

var list=document.queryselectoral(“[style]”);
对于(变量i=0;i-1)
警惕(“我是Arial!”);
}
Blaaa
布拉亚

Blaaa
只是一个想法-尝试混用CSS,而不是直接使用HTML。不幸的是,这不会起作用,因为我想清理的用户帖子使用了
如果您使用的是一个像样的所见即所得,它应该设置为不允许用户选择自己的字体(并去掉任何多余的样式标记)你用的是什么编辑器?你可以用css覆盖内联样式:你可以用css选择除了文本编辑器之外的所有东西。我认为这不管用。你能创建一个Fiddle plz吗?我是@work atm,所以我不能比这个atm做得更好-对不起,默认情况下,它也不是一个工作片段,但当使用纯JS时,这是最灵活的方法获取替换字体所需的元素集合。我将在回答中添加一部分,说明如何在javascript中更改字体,但希望将实际实现留给您;)(作为学习体验)
var css = document.createElement("style");
css.type = "text/css";
css.innerHTML = "span[style] { font-family:arial, tahoma !important }";
document.body.appendChild(css);