簡體   English   中英

舊Jquery過濾器在最新版本1.7.2中不起作用

[英]Old Jquery filter not working in latest version1.7.2

我在我的應用程序中有標簽導航的工作副本,我試圖將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。(成員選項卡)

檢查這個小提琴。使用 1.3.2和舊版本只有filter('#id')可以工作,但不能filter(':id') 。我不確定它是如何工作的。

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

第一:使用工作的hashchange處理程序,行tabContainers.hide().filter(':member').show(); $(window).trigger("hashchange");時,它將被取消$(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版本之間的差異。

你必須使用這個

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM