我正在做我的第一个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>
提前感谢您的帮助
答案 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规范。