javascript - 如何更改我搜索的文本颜色?

标签 javascript jquery asp.net-mvc

我正在尝试提供搜索服务。如果我在输入框中键入 "v",我会从 ajax 获取一个列表并显示它。

我想改变匹配部分的颜色。如果列表项是 "solve",则 "v" 将为红色。

$('input[name="searchInput"]').on("propertychange change keyup paste input", function() {
  var currentVal = $(this).val();
  if (currentVal == oldVal) {
    return;
  }
  oldVal = currentVal;

  callHtml('@Url.Action("SearchInput", "Search")', {
    search: currentVal
  }, function(data) {
    if (data) {
      $("#searchResult").html(data);
    }
  })
})

我已经在 $("#searchResult").html(data); 下尝试了这段代码

$(".searchlist").replaceAll(currentVal, "<span>" + currentVal + "</span>");

但是没有用。

最佳答案

使用您在评论中提到的 HTML 结构,您可以使用 .find() :contains 目标 <a> currentVal 中的元素找到了。

然后我会使用 .split().join()将匹配项包装在 <span> 中(您也可以使用正则表达式 replace ,但它会因某些保留字符匹配而变得棘手)。

$("#searchResult")
  .html(data)
  .find(`a:contains(${currentVal})`)
  .html((idx,old) => old
    .split(currentVal)
    .join(`<span class="highlighted">${currentVal}</span>`)
  );

var oldVal;
$('input[name="searchInput"]').on("propertychange change keyup paste input", function() {
  var currentVal = $(this).val();
  if (currentVal == oldVal) {
    return;
  }
  oldVal = currentVal;

  //mock data
  var data = `<ul>
                <li><a>hello</a></li>
                <li><a>world</a></li>
                <li><a>hello world</a></li>
                <li><a>foobar</a></li>
                <li><a>boo</a></li>
                <li><a>far</a></li>
              </ul>`;

  $("#searchResult")
    .html(data)
    .find(`a:contains(${currentVal})`)
    .html((idx,old) => old
      .split(currentVal)
      .join(`<span class="highlighted">${currentVal}</span>`)
    );
    
});
span.highlighted {
  color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input name="searchInput" placeholder="Search text">

<div id="searchResult"></div>

(请记住,此示例不是有条件地隐藏/显示匹配结果,只是演示突出显示)

关于javascript - 如何更改我搜索的文本颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56105053/

相关文章:

c# - 外键不起作用 | ASP .NET MVC 5 应用程序

asp.net-mvc - 使用 Swashbuckle 托管现有的 Swagger.JSON 文件

javascript - 如何将jquery省略号应用于div

javascript - 加载 angularJs Controller

javascript - 使用 div 标签和 Bootstrap 类更新 DOM

jQuery 将参数传递给带有 contains 子句的过滤语句

asp.net-mvc - 强类型 View 与动态类型 View

javascript-objects - JavaScript 对象创建方法

javascript - 异步/等待函数返回未定义?

javascript - Lodash 和 Angular : Transform JSON object into view model