0

次の検索とすべての検索ボタンをjavascriptで作成する方法はありますか? これはこれまでの私のスクリプトです...

<script type="text/javascript"> 
    function setSelectionRange(input, selectionStart, selectionEnd)
    {
        input.focus();
        input.setSelectionRange(selectionStart, selectionEnd);
    }
    function selectString (input, string)
    {
        var match = new RegExp(string, "g").exec(input.value);
        if (match)
    {
    setSelectionRange (input, match.index, match.index + match[0].length);
    }
    }
</script>

<form action="" method="get" onsubmit="selectString(document.getElementById('text'), document.getElementById('search').value);return false;">               
        <legend>
            <font face="verdana">Zoekveld</font face>
        </legend>
        <input id="search" name="search" type="text" size="75">
        <input type="submit" value="Zoeken">
</form>

<form name=form1 method="get">
        <legend>
            <font face="Verdana">Vind:</font face>
        </legend>
        <textarea id="text" cols="54" rows="20"></textarea>
</form>

このスクリプトの問題は、最初の一致しか見つからないことです...

4

1 に答える 1

0

関数の実行ごとに新しい正規表現を作成するのではなく、正規表現を変数に格納すると、そのカウンター プロパティlastIndexが保持されexec()ます。

var r = /^$/;
function setSelector(string) {
    r = new RegExp(string, "i");
}
function selectNextMatch(input) {
    var match = r.exec(input.value);
    if (match)
        setSelectionRange(...);
    else
        alert("Nothing found");
}
<input type="text" size="75" onchange="setSelector(this.value);">
<input type="button" value="Zoeken" onclick="selectNextMatch(document.getElementById('text'));">
<textarea id="text" cols="54" rows="20"></textarea>
于 2012-04-17T18:49:52.090 に答える