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 = $('
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jQuery 전후 예이 기사에서는 jquery after() 및 before() 메소드의 예를 볼 것입니다. before() 메서드는 선택한 요소 앞에 지정된 콘텐츠를 삽입합니다. after() 메서드는 선택한 요소 뒤에 지정된 콘텐츠...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.