Я сохранил входное текстовое значение в переменной с именем id = search-query. И затем я просматриваю данные JSON, чтобы найти какой-либо соответствующий результат, а затем выводить результат на экран. Есть ли способ, которым я могу выделить слово, соответствующее запросу query-query.val?
<body ng-app="products" ng-controller="ctrl">
<input type="text" id="search-query" name="query" placeholder="Enter product name"></input>
<tbody>
<tr ng-repeat="result in searchResult|orderBy:order:reverse" >
<td >
<a ng-href="{{result.link}}" target="_blank">
<span ng-bind="result.name" target="_blank"></span>
</a>
</td>
<td ng-bind="result.type"></td>
</tr>
</tbody>
</body>
var app2 = angular.module('products', []);
app2.controller('ctrl', function($scope) {
$scope.searchResult = [];
$scope.submit = function(){
var search = $("#search-query").val();
$.each(json.products, function(i, v) {
var regex = new RegExp(search, "i");
if (v.name.search(regex) != -1) {
// For the following line, is there a way which I can bold the word which match the search-query.val?
var name = v.name.replace(search, "<b>search</b>"); // doesn't work
$scope.searchResult.push({ name:name, type: v.type, link: v.url });
return;
}
});
}
Вам нужно использовать $&
backreference, который возвращает целое значение соответствия, но также обратите внимание, что первым аргументом для replace
метода является RegExp, а не строка search
:
var name = v.name.replace(regex, "<b>$&</b>");
^^
Демо-версия:
var search = "DOM";
var s = "No dom here";
var regex = new RegExp(search, "i");
if (s.search(regex) != -1) {
document.body.innerHTML = "<pre>" + s.replace(regex, "<b>$&</b>") + "</pre>";
}
`
backticks.
Я думаю, что
var name = v.name.replace(search,
"<b>search</b>");
должно быть
var name = v.name.replace(search,
"<b>" + search + "</b>");
Это то, что вы хотели?
content=document.getElementById("content");
content.innerHTML=content.innerHTML.replace(/search/gi,"<b>$&</b>");
<div id="content">This my search text</div>
Попробуй это
v.name.innerHTML=v.name.innerHTML.replace(/search/gi,"<b>$&</b>");
ngBindHtml
для рендеринга HTML, а не простоstrings
.