1

我试图创建一些东西,它将在整个网页中搜索某些关键字并使用纯 JavaScript 将它们斜体化。最近我什至没有尝试过用 JavaScript 做任何事情(偏离了方向),所以我不知道为什么这不起作用。我试过谷歌搜索,但对我的问题没有任何帮助(我发现的一切都是试图改变class元素的,而不仅仅是基本的 css 属性)。我真正想知道的是为什么这不起作用。这是我到目前为止所拥有的:

<html>
<head>
    <script>
        var str = document.getElementsByTagName("*").innerHTML;
        var n = str.match(/(Nautilus|Captain Nemo)/i);
        n.style.fontStyle = "italic";
    </script>
</head>
<body>
The Nautilus was a ship run by Captain Nemo.
</body>
</html>

应该产生结果:鹦鹉螺号是一艘由尼莫船长经营的船。

我没有经验的逻辑说我应该(尝试)将整个文档解析为一个大字符串,然后使用正则表达式匹配该字符串的关键字,然后更改style.fontStyle.

现在,就像我说的,由于很忙,我已经有一段时间没有接触过 JavaScript 甚至 jQuery 了,所以我可能会很忙,但是非常感谢任何帮助!

4

2 回答 2

5

n这里只是一个字符串。它不是页面上的节点。并且只有页面上的一个节点可以具有与其父节点不同的样式。你不能简单地告诉一个字符串是斜体的。它只是一个字符串,根本没有关联的表示信息。

所以要做到这一点,你必须:

  1. 查找文本
  2. <em>对于每个匹配项,将文本包装在一个元素中
  3. 将结果 HTML 字符串重新插入到文档中

或者在 JS 中:

// get all body content as a string
var str = document.body.innerHTML;

// find all magic words and wrap them in a <em> tag
var result = str.replace(/(Nautilus|Captain Nemo)/ig, "<em>$1</em>");

// set all body content HTML with new processed content
document.body.innerHTML = result;

看到它在这里工作:http: //jsfiddle.net/2px7m/

于 2013-06-22T00:37:09.650 回答
1
var str = document.getElementsByTagName('body');
//Use g so it will be global  
var regex= /(Nautilus|Captain Nemo)/ig;

str[0].innerHTML = str[0].innerHTML.replace(regex, "<i>$1</i>");
于 2013-06-22T00:47:56.497 回答