jquery实现非叠加式的搜索框提示效果


要使用jQuery实现一个非叠加式的搜索框提示效果,我们可以通过监听搜索框的输入事件(如`keyup`或`input`),然后根据输入内容动态显示或更新提示信息。非叠加式意味着每次输入时,提示信息都会更新而不是在之前的基础上叠加。

以下是一个简单的实现示例:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>非叠加式搜索框提示</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>
    #search-box {
        width: 300px;
        padding: 10px;
    }
    #suggestions {
        list-style-type: none;
        padding: 0;
        margin: 0;
        border: 1px solid #ccc;
        display: none;
        position: absolute;
        background-color: white;
        z-index: 1;
    }
    #suggestions li {
        padding: 10px;
        cursor: pointer;
    }
    #suggestions li:hover {
        background-color: #f9f9f9;
    }
</style>
</head>
<body>

<input type="text" id="search-box" placeholder="搜索...">
<ul id="suggestions"></ul>

<script>
$(document).ready(function(){
    $('#search-box').on('input', function() {
        var searchTerm = $(this).val().toLowerCase();
        // 假设的提示数据
        var suggestions = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'];

        // 过滤提示数据
        var filteredSuggestions = suggestions.filter(function(item) {
            return item.toLowerCase().startsWith(searchTerm);
        });

        // 清空旧的提示
        $('#suggestions').empty();

        // 显示新的提示
        if (filteredSuggestions.length > 0) {
            $('#suggestions').show();
            filteredSuggestions.forEach(function(item) {
                $('#suggestions').append('<li>' + item + '</li>');
            });
        } else {
            $('#suggestions').hide();
        }
    });

    // 点击提示项时,将内容填充到搜索框
    $('#suggestions').on('click', 'li', function() {
        $('#search-box').val($(this).text());
        $('#suggestions').hide();
    });
});
</script>

</body>
</html>

这个示例中,我们创建了一个搜索框和一个用于显示提示的`

    `列表。当用户在搜索框中输入文字时,我们根据输入内容过滤一个假设的提示数据列表,并动态更新提示列表的内容。如果过滤后的列表不为空,则显示提示列表;否则隐藏它。此外,当用户点击某个提示项时,我们会将该项的内容填充到搜索框中,并隐藏提示列表。

    请注意,这里的提示数据是硬编码的,实际应用中你可能需要从服务器获取这些数据。