javascript兼容性chrome,safari和opera上的字符串搜索

时间:2014-10-18 09:24:50

标签: javascript google-chrome firefox safari opera

我正在做我的第一个javascript应用程序,我注意到它只适用于firefox(我无法测试IE)。 我创建这个软件只是为了做一些练习,用几句话就可以搜索给定文本中的给定单词,并在div块上呈现,原始文本突出显示搜索的单词(如果存在)并且还告诉找到这个词的次数。

变量字符串是要进行搜索的文本,变量目标是要搜索的字词,变量结果字符串中搜索结果的存储位置。

我遇到的问题是,在Firefox中,代码可以很好地找到文本中每个单词存在的时间,在其他浏览器中(基于webkit?)它只找到一次单词。

这是javaScript代码:

function wordFinder() {
    'use strict';
    var string = document.getElementById('paste').value,
        target = document.getElementById('target').value,
        result =  string.match(target, 'g'),
        marked = string.replace(target, '<span class="found">' + target + '</span>', 'g');
    if (result === null) {
        document.getElementById('result').innerHTML = 'Your word was not found in the content';
        document.getElementById('string').innerHTML = '<h2 align="center">No results to display</h2>';
    } else {
        document.getElementById('result').innerHTML = ('The word ' + target + ' was found ' + result.length + ' times.');
        document.getElementById('string').innerHTML = marked;
    }
}

这是HTML:

    <!DOCTYPE html>

<html>
<head>
    <title>Page Title</title>
    <link rel="stylesheet" type="text/css" href="stylesheet.css">
    <script src="script.js" type="text/javascript" language="javascript"></script>
</head>
<body>
    <h2>Word finder</h2>
    <form name="finder" action="wordFinder" method="post">
        Paste the text you want to search within:<br>
        <textarea name="text" rows="10" cols="100" id="paste"></textarea><br>
        Paste the word you want to search:<br>
        <input name="search" type="text" id="target"/>
        <br><button type="button" onclick="wordFinder()">Search.</button>
    </form>
    <h4 id="result"></h4>
    <div id="style" class="layout"><p id="string">Results will appear here</p></div>
</body>
</html>

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这条线的处理方式不同:

result = string.match(target, 'g'),

请注意string.match只需要一个RegExp参数(参见ES5.1 spec)。你传递了两个参数,这意味着第一个被认为是RegExp,这意味着它不会给你全局匹配,除非target类似于/foo/g。您可以自己创建RegExp对象以使其与全局匹配:

result = string.match(new RegExp(target, 'g')),

请参阅fiddle

我测试了Opera 12(presto),Opera 26,IE11和Chrome 40,它们的行为方式相同,为原始代码提供了一个匹配,只有Firefox表现不同 - 似乎违反了EcmaScript 5.1规范。