0

我的应用程序中有标签导航的工作副本,我尝试将 jquery 更新为 latest(1.7.2) ,为此我从 jquery website 下载了 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 更改为 #member 或 :first 加载第一个 div 的内容,但仍然没有选择第一个 li。(成员选项卡)

4

3 回答 3

1

检查这个小提琴。 只有 1.3.2 和旧版本才filter('#id')有效,但不能filter(':id')。我不确定它对你有用。

更新tabContainers.hide().filter(':member').show();tabContainers.hide().filter('#member').show();

于 2012-06-04T07:09:51.330 回答
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中测试

演示

过滤锚点的.filter(function(){...})方法应该使您免受 jQuery 版本之间的差异的影响。

于 2012-06-04T14:04:52.330 回答
0

你必须使用这个

 tabContainers.hide().filter('#member').show();

或者

tabContainers.hide().filter(':first').show();

用 id 显示第一个 div member

并突出相应的a

改变这个

$('a[hash=' + hash + ']').addClass('selected');

$('a[href=' + hash + ']').addClass('selected');

由于hash不是属性名称,它是href.

于 2012-06-04T08:43:17.887 回答