Используйте jQuery.fn.extend()
, чтобы расширить jQuery с помощью пользовательских методов, которые вы затем примените к родительскому элементу и дочерним элементам в этом элементе.
см. https://api.jquery.com/jquery.fn.extend/ для получения более подробной информации
Это всего лишь пример и руководство по настройке кода, но неполное из-за неполного примера в вашем вопросе.Кроме того, имейте в виду, чтобы иметь только уникальные идентификаторы HTML-атрибутов, но используйте классы CSS, если вам нужно повторять элементы.
jQuery.fn.extend({
searchAndDisplay: function () {
return this.each(function () {
var searchWrapper = $(this);
$.ajaxSetup({cache: false});
searchWrapper.find('.search').keyup(function () {
searchWrapper.find('.result').html('');
// searchWrapper.find('.state').val(''); //not sure what is this, since it is not provided in sample
var searchField = searchWrapper.find('.search').val();
var expression = new RegExp(searchField, "i");
$.getJSON('js/data.json', function (data) {
$.each(data, function (key, value) {
if (value.name.search(expression) != -1 || value.location.search(expression) != -1) {
searchWrapper.find('.result').append(
'<li class="list-group-item link-class"' +
' data-name="' + value.name + '"' +
' data-code="' + value.code + '"' +
' data-location="' + value.location + '"' +
' data-image="' + value.image + '"' +
'>' + value.name + '</li>');
}
});
});
});
searchWrapper.find('.result').on('click', 'li', function () {
var name = $(this).data('name');
var code = $(this).data('code');
var location = $(this).data('location');
var click_text = $(this).text().split('|');
searchWrapper.find('.search').val($.trim(click_text[0]));
searchWrapper.find('.search').attr('readonly', true);
$(".result").html('');
searchWrapper.find('.result').after('<input type="hidden" name="name" value="' + name + '">');
searchWrapper.find('.result').after('<input type="hidden" name="code" value="' + code + '">');
searchWrapper.find('.result').after('<input type="hidden" name="location" value="' + location + '">');
});
});
}
});
$(document).ready(function () {
//then apply same method on each element
$("#searchComponent-1").searchAndDisplay();
$("#searchComponent-2").searchAndDisplay();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<div id="searchComponent-1">
<div class="btn-group">
<input type="text" name="search" placeholder="input 1" class="search form-control" size="3000"
onkeypress="return event.keyCode!=13"/>
<span class="searchclear glyphicon glyphicon-remove-circle"></span>
</div>
<ul class="list-group result"></ul>
</div>
<div id="searchComponent-2">
<div class="btn-group">
<input type="text" name="search" placeholder="input 2" class="search form-control" size="3000"
onkeypress="return event.keyCode!=13"/>
<span class="searchclear glyphicon glyphicon-remove-circle"></span>
</div>
<ul class="list-group result"></ul>
</div>