innerHTML 属性 在 JS 函数之后没有改变

innerHTML property is not changing after JS function

我是 JS 新手,所以我有以下任务:页面上给出了一些文本,当用户想要通过在 [=25= 中添加此字符串来查找一组字符或字符串时],然后点击"search",每次遇到这个字符串在我们的文本中都应该标记为粗体。 查看我的代码,我几乎可以确定该函数正在运行,但在函数完成后,粗体字符串会闪烁片刻,文本 returns 会恢复到初始状态。

请帮我找出我的错误。 这是代码。

function look(a) {
  var str = document.getElementById("original").innerHTML;
  var len = a.text.value.length;
  var begin = str.indexOf(a.text.value);
  var final = str;

  if (begin == -1) {
    alert("No matches");
    return false;
  }
  if (begin > -1) {
    var count = 0;
    final = str.substring(count, begin) + "<b>" + a.text.value + "</b>" + str.substring(begin + len + 1, str.length);
    while (begin != -1) {
      begin = str.indexOf(a.text.value, begin + len);
      if (begin == -1) break;
      final = final.substring(count, begin) + "<b>" + a.text.value + "</b>" + str.substring(begin + len + 1, str.length);
    }

    document.getElementById("original").innerHTML = final;

    return true;
  }

}
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <span id="original" type="text">Some given text</span>
  <br/>
  <form name="search" onsubmit="return look(this)">
    <p>Enter text to search<input type="text" name="text"></p>
    <p><input type="submit" value="search"></p>
  </form>
</body>

页面刷新!默认情况下,表单会刷新页面。您可以使用 on submit 函数的 return 值来停止此默认行为:只是 return false.

   function look(a)
        {
            var str=document.getElementById("original").innerHTML;
            var len=a.text.value.length;
            var begin=str.indexOf(a.text.value);
            var final=str;
            
            if (begin==-1){
                alert("No matches");
                return  false; 
            }
            if (begin>-1){
                var count=0;
                final=str.substring(count,begin)+"<b>"+a.text.value+"</b>"+str.substring(begin+len+1, str.length);
                while(begin!=-1){ 
                    begin=str.indexOf(a.text.value,begin+len);
                    if(begin==-1) break;
                    final=final.substring(count, begin)+"<b>"+a.text.value+"</b>"+str.substring(begin+len+1, str.length);
               } 
                
                document.getElementById("original").innerHTML=final;
                
                return false;
            }

        }
        
<body>
    <span id="original" type="text">
            Some given text
            </span>
    <br/>
    <form name="search" onsubmit="look(this); return false;">
            <p>
                Enter text to search<input type="text" name="text">
                
            </p>
            <p>
                <input type="submit" value="search">
                
            </p>
            
        </form>
</body>
</html>

成功找到文本范围后返回 true 即可提交表单。您需要 return false 使表单使提交无效。这是更新后的代码,我已经将 return 语句从 if-else 块中更改出来,并且 returned false 两种方式。另一种方法是将提交按钮设为 input[type='button'] 并为其注册一个 onclick 事件侦听器。

    function look(a)
    {
        var str=document.getElementById("original").innerHTML;
        var len=a.text.value.length;
        var begin=str.indexOf(a.text.value);
        var final=str;

        if (begin==-1){
            alert("No matches"); 
        }
        if (begin>-1){
            var count=0;
            final=str.substring(count,begin)+"<b>"+a.text.value+"</b>"+str.substring(begin+len+1, str.length);
            while(begin!=-1){ 
                begin=str.indexOf(a.text.value,begin+len);
                if(begin==-1) break;
                final=final.substring(count, begin)+"<b>"+a.text.value+"</b>"+str.substring(begin+len+1, str.length);
           } 

            document.getElementById("original").innerHTML=final;


        }

        return false;

    }