我的应用程序中有标签导航的工作副本,我试图将jquery更新到最新版本(1.7.2),为此我从jquery网站下载了jquery-1.7.2.min.js。更新后,以下行未按预期工作tabContainers.hide().filter(':member').show();
这是完整的jquery方法。
$(function () {
var tabContainers = $('div.tabs > div');
tabContainers.hide().filter(':member').show();
$(window).bind('hashchange', function () {
var hash = window.location.hash || '#member';
tabContainers.hide();
tabContainers.filter(hash).show();
$('div.tabs ul.tabNavigation a').removeClass('selected');
$('a[hash=' + hash + ']').addClass('selected');
document.getElementById("submitform").action="newaction.action"+hash;
});
$(window).trigger( "hashchange" );
});
这是html部分
<ul class="tabNavigation">
<li><a href="#member">Tab1 </a></li>
<li><a href="#tab2">tab2</a></li>
<li><a href="#tab3">tab3</a></li>
</ul>
<div id="member">content goes here</div>
<div id="tab2 . . .
更新:更改:成员为#member或:首先加载第一个div的内容,但仍然没有选择第一个li。(成员标签)
答案 0 :(得分:1)
检查fiddle
。只有1.3.2及更早的版本filter('#id')
可以使用filter(':id')
但不是tabContainers.hide().filter(':member').show();
。我不确定它对你有用。
将tabContainers.hide().filter('#member').show()
更新为{{1}};
答案 1 :(得分:1)
首先:使用工作的hashchange处理程序,当tabContainers.hide().filter(':member').show();
触发时,行$(window).trigger("hashchange");
将无效。因此,任何修复tabContainers.hide().filter(':member').show();
的尝试都是徒劳的,并且可以删除该声明。
第二:location.hash
存在跨浏览器问题,即某些浏览器返回带有前导'#'的字符串,有些则不返回。这需要对返回的字符串进行规范化。
考虑到这些因素,您可以尝试:
$(function() {
var tabContainers = $('div.tabs > div'),
submitform = $("#submitform");
$(window).on('hashchange', function () {
var hash = (location.hash=='' || location.hash=='#') ? '#member' : location.hash;
var hashNormalized = (hash.match(/^#/)) ? hash : '#'+hash;
tabContainers.hide().filter(hashNormalized).show();
$('div.tabs ul.tabNavigation a').removeClass('selected').filter(function() {
return this.hash == hashNormalized;
}).addClass('selected');
submitform.attr('action', 'newaction.action' + hashNormalized);
}).trigger('hashchange');
});
在Opera 11.64和IE9中测试过。 请务必在FF中进行测试
请参阅DEMO
过滤锚点的.filter(function(){...})
方法可以让你免受jQuery版本之间的差异。
答案 2 :(得分:0)
你必须使用这个
tabContainers.hide().filter('#member').show();
或
tabContainers.hide().filter(':first').show();
显示ID为member
的第一个div。
并突出显示相应的a
更改此
$('a[hash=' + hash + ']').addClass('selected');
要
$('a[href=' + hash + ']').addClass('selected');
由于hash
不是属性名称,因此href
。