2014-02-10 73 views
0

我想通過使用匹配(我從這個post改編的代碼)從類名中提取數字來重新排列我的列表順序,但它不起作用。這裏是我的代碼:通過提取類名來重新排序jQuery的列表項

HTML:

<ul class="class-of-ul"> 
    <li><a href="#" class="class-of-li-66">66</a></li> 
    <li><a href="#" class="class-of-li-69 current-li">69</a></li> 
    <li><a href="#" class="class-of-li-65" >65</a></li> 
    <li><a href="#" class="class-of-li-68" >68</a></li> 
    <li><a href="#" class="class-of-li-67" >67</a></li> 
</ul> 

的jQuery:

$(document).ready(function() { 
    $("ul").append($("li").get().sort(function(a, b) { 
     return parseInt($(a).attr("class").match(/\d+/)) - parseInt($(b).attr("class").match(/\d+/)) 
    })); 
}); 

,這是jsfidle link

回答

1

class對於lia元素,讓你需要使用使用.find()來獲得anchor元素並找到其類

$(document).ready(function() { 
    $("ul").append($("li").get().sort(function (a, b) { 
     return $(a).find('a').attr('class').match(/\d+/) - $(b).find('a').attr('class').match(/\d+/) 
    })); 
}); 

演示:Fiddle

+0

謝謝。有用! – webchun

+0

嗨,我已經在我的網站上實現了這一點,但不幸的是,它在控制檯上返回錯誤:Uncaught TypeError:無法調用未定義的方法匹配。對此有何想法? – webchun

+0

@dreamexploded這意味着'.attr('class')'是未定義的,你可以添加一個'console.log(a,$(a).find('a')。attr('class')); console.log(b,$(b).find('a')。attr('class'))'看看發生了什麼 –

1

因爲要排序上li元素,但他們沒有任何類。 a元素。移動你的課程到li元素,一切都會好起來的。

http://jsfiddle.net/d8gfk/3/

<ul class="class-of-ul"> 
    <li class="class-of-li-66"><a href="#">66</a></li> 
    <li class="class-of-li-69 current-li"><a href="#">69</a></li> 
    <li class="class-of-li-65" ><a href="#">65</a></li> 
    <li class="class-of-li-68" ><a href="#">68</a></li> 
    <li class="class-of-li-67" ><a href="#">67</a></li> 
</ul> 

或者你可以在樣檢查每個lia

+0

啊我笨了,謝謝! – webchun

相關問題