尝试使用JavaScript查找关键字并将其斜体化

时间:2013-06-22 00:19:27

标签: javascript html css dom

我尝试创建一些可以搜索整个网页以查找某些关键字的内容,并使用纯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>

应该产生结果: Nautilus 是一艘由 Nemo船长经营的船。

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

现在,就像我说的那样,由于忙碌,我现在甚至都没有触及JavaScript甚至jQuery一段时间,所以我可能会对此感到满意,但任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:5)

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

要做到这一点,你必须:

  1. 查找文字
  2. 为每场比赛
  3. 包裹<em>元素中的文字
  4. 将结果HTML字符串插回文档
  5. 或者在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/

答案 1 :(得分: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>");