javascript - 如何使用搜索框滚动到列表中的特定数据

标签 javascript jquery css ajax codeigniter

在我的元素中,我有一个搜索框和一个由数据库中的数据填充的 div 列表。我的想法是,当我在搜索框中输入内容时,它将在列表中的特定数据上滚动。感谢,并有一个愉快的一天!

这是 JSFIDDLE

我已经编辑了这个问题并将这个脚本添加到我的元素中,但它仍然没有滚动。

$(document).ready(function() {
        $('.search-field').on('keyup blur change', function() {
            var text_s = $(this).val();

            $("li#dirlist").removeClass("highlight");

            if (text_s.length > 0){
                $("li#dirlist").each(function(){
                    var li_value = $(this).text();
                    if (li_value.indexOf(text_s) >= 0){
                        $(this).addClass("highlight");
                        var x = getOffset( document.getElementById(this.id) ).left;
                    }
                });
            }
        });
    }); 

    function getOffset( el ) {    
        var _x = 0;
        var _y = 0;
        while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
            _x += el.offsetLeft - el.scrollLeft;
            _y += el.offsetTop - el.scrollTop;
            el = el.offsetParent;
        }
        window.scrollTo(_x,_y);
        return { top: _y, left: _x };
    }       

最佳答案

这就是你想要的

JsFiddle: http://jsfiddle.net/q52Fc/1/

HTML:

<div class="container">
    <div class="row-fluid">
        <div class="span12">
            <div class="green-bar">
                <h4><center>Directory</center></h4>
            </div>
        </div>
    </div>
    </br>
    </br>
    <div class="span4">
        <div id="name-dir">
            <div class="row">
                <div class="control-group">
                    <div class="controls">
                        <div class="input-prepend"> <span class="add-on"><i class="icon-search"></i></span>

                            <input class="block search-field" id="inputIcon" type="text" placeholder="Search">
                        </div>
                    </div>
                </div>
            </div>
            </br>
            <div class="contact-list">
                <div class="contact-gray-bar">A</div>
                <ul class="contact">
                    <!-- insert records here -->
                    <li>Apple</li>
                    <li>Amethyst</li>
                    <li>Aratilis</li>
                </ul>
                <div class="contact-gray-bar">B</div>
                <ul class="contact">
                    <!-- insert records here -->
                    <li>Banana</li>
                </ul>
                <div class="contact-gray-bar">C</div>
                <ul class="contact">
                    <!-- insert records here -->
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                    <li>Cross</li>
                </ul>
                <div class="contact-gray-bar">K</div>
                <ul class="contact">
                    <!-- insert records here -->
                    <li>Kiwi</li>
                </ul>
                </br>
            </div>
        </div>
    </div>
</div>
</div>

JavaScript:

$(function () {
    $('.search-field').on('keyup', function () {
        var first_result = false;

        var text_s = $(this).val().toLowerCase();

        //Reinit li elements and the contact-list position
        $("li").removeClass("highlight");
        $(".contact-list").scrollTop($(".contact-list").position().top);

        if (text_s.length > 0) {
            $("li").each(function () {
                var li_value = $(this).text().toLowerCase();
                if (li_value.indexOf(text_s) >= 0) {
                    $(this).addClass("highlight");
                    if (first_result == false) {
                        //Have to move to the 1rst element's position
                        first_result = true;
                        $(".contact-list").scrollTop($(this).position().top);
                    }
                }
            });
        }
    });
});

CSS:没有做任何改变。

如果你想了解更多关于职位的信息,你可以阅读:http://api.jquery.com/position/

关于javascript - 如何使用搜索框滚动到列表中的特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24323619/

相关文章:

javascript - 当只有一个元素时,字符串数组作为字符串传递到我的 Controller

javascript - 获取没有ID的span文本

jquery - 插入将复制的可选空格

jquery - 元素超出窗口添加类

css - Laravel 链接到不同页面上的另一个部分

CSS:不会以最大宽度居中div

javascript - 检测用户触发或代码调用的 jquery 事件

javascript - Http 服务工厂在 Angular 中将未定义返回给 Controller

javascript - 如何在 fullcalendar 的 updateEvent 中传递 startDate 和 event ?

css - 如何堆叠 fontawesome 图标