/** * 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 = $('<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);
$.locationHash()是读取当前页面的hash,$.locationHash("a")是设置当前页面的hash,$(window).hashchange()监听hash改变事件(在第一次绑定事件的时候如果页面有hash值,则立即触发一次事件)。
例子:
$(window).hashchange(function() {
alert($.locationHash());
});
$("input").click(function() {
$.locationHash($(this).val());
});
完整的例子,一个在服务器端进行数字加倍运算:
<script type="text/javascript">
var calcFinish = function(data) {
$("#msg").text(data);
}
$(function() {
$("#btn1").click(function() {
//改变hash
$.locationHash($("#txt1").val());
});
$(window).hashchange(function() {
var i = $.locationHash();//获得hash
if (i) {//发出计算请求
$.post("CalcService.ashx", {"i":i},calcFinish);
}
});
});
</script>
<input type="text" id="txt1" /><span id="msg"></span>
<input type="button" id="btn1" value="calc" />
使用的时候注意前进、后退按钮和地址栏的变化。
相关推荐
而 `jquery.hash.min.js` 和 `jquery.ba-hashchange.min.js` 这两个文件则是在 jQuery 基础上扩展了对浏览器 URL hash 变化的处理,从而实现单页面应用(Single Page Application, SPA)中后退和前进按钮的刷新功能...
-- 引入插件文件 --> <script src="path/to/plugin.js"></script> </head> <body> <nav id="sidebar"> <!-- 导航项 --> </nav> <div id="content"> <!-- 页面内容 --> </div> <script> $(document).ready...
**jQuery Hash Tag Input 插件详解** 在网页开发中,哈希标签(#tags)已经成为了数据分类和用户互动的重要工具,特别是在社交媒体、博客和论坛等应用中。jQuery 是一个广泛使用的 JavaScript 库,它提供了丰富的...
在HTML文件中,通过`<script>`标签引入jQuery库和`md5.js`插件文件。如果项目已经使用了CDN,可以直接链接到jQuery库,然后将"jQuery-MD5-master"目录下的"md5.js"文件链接到页面。 此外,值得注意的是,虽然MD5在...
jQuery DOM元素哈希插件 支持的哈希方法 base64 md5 sha1 自己编译 如果要编译自己的版本或jquery.hash的修改 npm install node compile 抓取out/jquery.hash.min.js文件并将其插入! 例子 DOM元素 $elem = $ ...
**jQuery的单页面滚动插件**是Web开发中一种常用的技术,它允许用户在单一页面内通过滚动浏览多个“分页”内容,提供流畅且直观的用户体验。这种插件通常结合了JavaScript库jQuery,利用其强大的DOM操作和事件处理...
本文实例讲述了jQuery md5加密插件jQuery.md5.js用法。分享给大家供大家参考,具体如下: 使用方法: $.(md5("你想要加密的字符串")); jquery.md5.js插件代码: /** * jQuery MD5 hash algorithm function * *...
idTabs是一款基于jQuery库的轻量级Tab切换插件,其设计目标是提供一个简单、易用且功能齐全的解决方案,用于在网页中创建Tab式布局。这个插件以其直观的API和良好的浏览器兼容性而受到开发者的青睐。在本文中,我们...
门户最热门搜索词、论坛热门搜索这个都是后台控制添加的,后台->全局->搜索设置->热门关键词,添加即可 这里需要注意一个特殊情况,如果开启了纵横搜索,可能无法添加关键词,那么只能在模板里面直接添加 打开...
#jQuery序列化哈希插件 在麻省理工学院(MIT)许可下由托管。 jQuery插件,该插件从表单或任何DOM元素的序列化返回哈希值。 它在嵌套哈希的输入名称上支持方括号。 如果要从表单获取值并将其与另一个哈希合并,...
jquery-pjaxr 是一个插件,它使用 ajax 和 pushState 来提供快速浏览体验。 它能够用完整的后退功能替换多个容器和不同的头部标签。 对于 pjaxr 的完全降级。 终于发布了 1.2 版,但还有很多工作要做,目前我没有...
()->clientScript->registerCoreScript('jquery'); ?> ()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/jquery-pjax/jquery.pjax.js'); ?> ``` 2. 在HTML结构中,定义需要通过Pjax加载的链接和...
Chroma-Hash是一个能够为用户提供更好密码输入体验的jQuery插件。它能够将输入的值转换成某种颜色组合。用户只要记住正确密码的颜色,就能够判断自己输入的密码是否正确,而不需要等到提交服务器才知道是否正确。 ...
**jQuery 类级别插件——实现页面滚动导航** 在网页设计中,随着页面内容的增多,用户需要滚动页面来查看所有信息。为了提供更好的用户体验,开发者经常会在页面边缘添加“返回顶部”、“返回底部”这样的功能按钮...
**jQuery平滑滚动插件详解** 在Web开发中,用户界面的流畅性和用户体验是至关重要的。jQuery平滑滚动插件正是为了实现这一点而设计的,它使得网页元素的滚动过程更加平滑、自然,尤其在处理长页面和焦点图切换时...
《jQuery.scrollTo.js网页滚动插件深度解析》 在网页设计中,流畅的用户交互体验是提升网站品质的关键因素之一。jQuery.scrollTo.js插件正是这样一款工具,它为开发者提供了强大的网页滚动控制功能,使得网页的整体...
- **导航到页内指定位置**:使用jQuery自动根据URL中的hash值定位到页面中的指定位置。 - **Automatically generate table of contents using jQuery**:利用jQuery自动生成目录。 - **“OutsidetheBox” Navigation...
**jQuery分页插件jPages详解** 在网页开发中,数据分页是一种常见的优化加载速度和提高用户体验的方法。尤其在处理大量数据时,分页可以让用户更流畅地浏览信息,而不是一次性加载所有内容。`jQuery`是JavaScript的...
本篇文章将深入探讨如何使用jQuery实现树形目录,特别是基于jQuery UI库中的`treeview`插件。 ### 1. jQuery简介 jQuery是一个轻量级的JavaScript库,简化了HTML文档遍历、事件处理、动画和Ajax交互。它的API设计...
然而,jQuery本身并不直接支持Cookie操作,但可以通过一些插件来实现,如`jquery-cookie`插件。 **一、jQuery-cookie插件的使用** `jquery-cookie`是专门为jQuery设计的一个轻量级插件,它可以方便地读取、设置和...