搜索输入字段中的所有单词,然后替换div标签中的所有匹配单词

时间:2018-07-16 06:39:17

标签: javascript jquery

$('#srctxt div').each(function() {
    var dari = $('#box').val();
    var text = $(this).text();
    $(this).html(text.replace(dari, '<b>'+dari+'</b>')); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

<form method="POST">

<input type="text" id="box" value="love"> // working
<input type="text" id="box" value="love girl"> // not working

<div id="srctxt">
<div>i love you</div>
<div>love girl</div>
<div>not love</div>
<div>love love love</div>
</div>
</form>

我正在通过用搜索结果将输入单词的每个匹配单词加粗来开发搜索站点。

如果仅输入单词,例如单词love,则此脚本可以很好地工作。但是,如果使用两个或多个单词,则此脚本将无法正常工作。

例如单词love girl,然后结果中的粗体仅一行。但这都包含爱这个词,所以这对我来说是个问题。

对不起,如果我的英语有点难以理解。但是,我正在寻求有关此jQuery代码修复的建议。谢谢...

3 个答案:

答案 0 :(得分:0)

我认为您将不得不在搜索字段中循环浏览文本。假设未输入特殊字符(-,{,},>等),则可以执行以下操作

$('#srctxt div').each(function() {
    var dari = $('#box').val().split(" ");
    var text = $(this).text();
    dar.map((val, index) => {
        $(this).html(text.replace(val, '<b>'+val+'</b>')); 
    });
});

让我知道这是否有帮助。

答案 1 :(得分:0)

也许您必须split搜索查询,例如: 'love girl'.split(' '); // ---> ['love','girl']; 并在结果数组上进行forEach的操作,使每个操作都像您的dari变量一样。 请注意,即使您的单词是一个单词(例如“ love”),split的结果仍将是一个数组。因此您无需将逻辑分为两个分支。

答案 2 :(得分:0)

您可以使用正则表达式轻松完成此操作

以下是步骤:

第1步。input value拆分为array of input words

步骤2。遍历要执行搜索/替换条件的所有div

步骤3。为每个word in input array创建一个searchregexp并替换(如果找到)

if ($('#box').val().length !== 0) {
   var dari = $('#box').val().split(' ');
   $('#srctxt div').each(function() {
       dari.map(item => {
         var regex = new RegExp('(' + item + ')(?!>|b>)', 'gi');
         $(this).html($(this).html().replace(regex, "<b>$1</b>"));
          });       
      });
    
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="box" value="love girl b"> 

<div id="srctxt">
<div>i love you</div>
<div>love girl</div>
<div>not love</div>
<div>love love love</div>
</div>

我还删除了具有相同ID的重复输入字段,因为它是无效的html。