jquery - > 해시 플러그 인

11611 단어 jquery
/**
 * jQuery hashchange 1.0.0
 * 
 * (based on jquery.history)
 *
 * modified by net.itcast.cn,make it easy to use
 *
 * Copyright (c) 2008 Chris Leishman (chrisleishman.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 */
(function($) {

    $.fn.extend({
        hashchange: function(callback) {
            this.bind('hashchange', callback);

            if (location.hash)//if location.hash is not empty,fire the event when load,make ajax easy
            {
                callback();
            }
        },
        openOnClick: function(href) {
            if (href === undefined || href.length == 0)
                href = '#';
            return this.click(function(ev) {
                if (href && href.charAt(0) == '#') {
                    // execute load in separate call stack
                    window.setTimeout(function() { $.locationHash(href) }, 0);
                } else {
                    window.location(href);
                }
                ev.stopPropagation();
                return false;
            });
        }
    });

    // IE 8 introduces the hashchange event natively - so nothing more to do
	/*
    if ($.browser.msie && document.documentMode && document.documentMode >= 8) {
        $.extend({
            locationHash: function(hash) {
                if (!hash)//get hash value
                {
                    if (location.hash.charAt(0) == '#') {
                        return location.hash.substr(1, location.hash.length-1);
                    }
                    return location.hash;
                }
                if (!hash) hash = '#';
                else if (hash.charAt(0) != '#') hash = '#' + hash;
                location.hash = hash;
            }
        });
        return;
    }*/

    var curHash;
    // hidden iframe for IE (earlier than 8)
    var iframe;

    $.extend({
        locationHash: function(hash) {
            if (!hash)//get hash value
            {
                if (location.hash.charAt(0) == '#') {
                    return location.hash.substr(1, location.hash.length - 1);
                }
                return location.hash;
            }
            if (curHash === undefined) return;

            if (!hash) hash = '#';
            else if (hash.charAt(0) != '#') hash = '#' + hash;

            location.hash = hash;

            if (curHash == hash) return;
            curHash = hash;

            if ($.browser.msie) updateIEFrame(hash);
            $.event.trigger('hashchange');
        }
    });

    $(document).ready(function() {
        curHash = location.hash;
		/*
        if ($.browser.msie) {
            // stop the callback firing twice during init if no hash present
            if (curHash == '') curHash = '#';
            // add hidden iframe for IE
            iframe = $('<iframe />').hide().get(0);
            $('body').prepend(iframe);
            updateIEFrame(location.hash);
            setInterval(checkHashIE, 100);
        } else {
            setInterval(checkHash, 100);
        }*/
    });
    $(window).unload(function() { iframe = null });

    function checkHash() {
        var hash = location.hash;
        if (hash != curHash) {
            curHash = hash;
            $.event.trigger('hashchange');
        }
    }
	/*
    if ($.browser.msie) {
        // Attach a live handler for any anchor links
        $('a[href^=#]').live('click', function() {
            var hash = $(this).attr('href');
            // Don't intercept the click if there is an existing anchor on the page
            // that matches this hash
            if ($(hash).length == 0 && $('a[name=' + hash.slice(1) + ']').length == 0) {
                $.locationHash(hash);
                return false;
            }
        });
    }*/

    function checkHashIE() {
        // On IE, check for location.hash of iframe
        var idoc = iframe.contentDocument || iframe.contentWindow.document;
        var hash = idoc.location.hash;
        if (hash == '') hash = '#';

        if (hash != curHash) {
            if (location.hash != hash) location.hash = hash;
            curHash = hash;
            $.event.trigger('hashchange');
        }
    }

    function updateIEFrame(hash) {
        if (hash == '#') hash = '';
        var idoc = iframe.contentWindow.document;
        idoc.open();
        idoc.close();
        if (idoc.location.hash != hash) idoc.location.hash = hash;
    }

})(jQuery);

  
JQuery HashChange 플러그 인 수정
 
AJAX 를 할 때 전진, 후퇴 버튼 의 처리 가 중요 하 므 로 location. hash 를 사용 하여 이 문 제 를 해결 할 수 있 습 니 다.원 리 는 중복 되 지 않 습 니 다. 편 의 를 위해 JQuery 의 HashChange 플러그 인 을 사 용 했 습 니 다. 그러나 이 플러그 인 은 사용 하기에 좋 지 않 습 니 다. $. locationHash () 방법 은 hash 만 설정 할 수 있 고 hash 를 읽 을 수 없 으 며 JQuery 스타일 에 맞지 않 습 니 다.hashchange 이 벤트 는 사용자 가 주소 표시 줄 을 통 해 'a. htm? \ # a' 를 직접 칠 때 실행 되 지 않 으 며 ready 때 처리 해 야 합 니 다.나 는 이 플러그 인 에 대해 다음 과 같은 수정 코드 를 만 들 었 다.
(function($) {
    $.fn.extend({        hashchange: function(callback) {            this.bind('hashchange', callback);
            if (location.hash)//if location.hash is not empty,fire the event when load,make ajax easy            {                callback();            }        },        openOnClick: function(href) {            if (href === undefined || href.length == 0)                href = '#';            return this.click(function(ev) {                if (href && href.charAt(0) == '#') {                    // execute load in separate call stack                    window.setTimeout(function() { $.locationHash(href) }, 0);                } else {                    window.location(href);                }                ev.stopPropagation();                return false;            });        }    });
    // IE 8 introduces the hashchange event natively - so nothing more to do    if ($.browser.msie && document.documentMode && document.documentMode >= 8) {        $.extend({            locationHash: function(hash) {                if (!hash)//get hash value                {                    if (location.hash.charAt(0) == '#') {                        return location.hash.substr(1, location.hash.length-1);                    }                    return location.hash;                }                if (!hash) hash = '#';                else if (hash.charAt(0) != '#') hash = '#' + hash;                location.hash = hash;            }        });        return;    }
    var curHash;    // hidden iframe for IE (earlier than 8)    var iframe;
    $.extend({        locationHash: function(hash) {            if (!hash)//get hash value            {                if (location.hash.charAt(0) == '#') {                    return location.hash.substr(1, location.hash.length - 1);                }                return location.hash;            }            if (curHash === undefined) return;
            if (!hash) hash = '#';            else if (hash.charAt(0) != '#') hash = '#' + hash;
            location.hash = hash;
            if (curHash == hash) return;            curHash = hash;
            if ($.browser.msie) updateIEFrame(hash);            $.event.trigger('hashchange');        }    });
    $(document).ready(function() {        curHash = location.hash;        if ($.browser.msie) {            // stop the callback firing twice during init if no hash present            if (curHash == '') curHash = '#';            // add hidden iframe for IE            iframe = $('

좋은 웹페이지 즐겨찾기