2014-02-10 103 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

相关问题