【问题标题】:How to scroll to specific data on list using searchbox如何使用搜索框滚动到列表中的特定数据
【发布时间】:2014-06-20 09:03:39
【问题描述】:

我有一个搜索框和一个 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 };
    }       

【问题讨论】:

    标签: javascript jquery css ajax codeigniter


    【解决方案1】:

    这就是你想要的

    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/

    【讨论】:

    • 谢谢你的最好的!
    【解决方案2】:

    尝试类似的东西

    $(function() {
        $('.search-field').on('keyup blur change', function() {
            var text_s = $(this).val();
    
            $("li").removeClass("highlight");
    
            if (text_s.length > 0){
                $("li").each(function(){
                    var li_value = $(this).text();
                    //alert(this.id);
                    if (li_value.indexOf(text_s) >= 0){
                        //alert(text_s);
                        $(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 };
    }
    

    DEMO

    【讨论】:

    • 嗨。感谢您的回答,但它仍然没有滚动搜索数据。我需要使用锚来滚动吗?
    • 我将它应用到我的项目中。它包含 300 多条记录,但仍然无法正常工作。也许在我使用的 jquery 版本上?
    • 我调整了小提琴的大小。你是对的。它在这里工作。但是为什么当我将它应用于我的代码时它不起作用?我在使用的版本上有 jquery-1.8.3.js。
    • 把你的整个代码放在这里,那么你可能会在 Jquery 上做错了。还有一件事确实在你的页面中滚动,如果然后请放并尝试一次..
    • 我不能把整个代码放在这里。它说它有太多的字符。我只是在我的代码上添加你的答案并编辑一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多