2012-01-27 42 views
0

Hy there,jQuery获得第二课,并删除类

我有帖子按他们的年份排序。默认情况下它们都是隐藏的(它们获得隐藏元素的.js类)。所以,现在它看起来像这样:

<div class="press-wrapper"> 
<div class="post-entry post-2011 js">...</div> 
<div class="post-entry post-2011 js">...</div> 
<div class="post-entry post-2010 js">...</div> 
<div class="post-entry post-2010 js">...</div> 
<div class="post-entry post-2009 js">...</div> 
<div class="post-entry post-2009 js">...</div> 
<div class="post-entry post-2008 js">...</div> 
</div> 

我想documentReady负载最新日期的所有项目,所以它应该是这样的:

<div class="press-wrapper"> 
<div class="post-entry post-2011">...</div> 
<div class="post-entry post-2011">...</div> 
<div class="post-entry post-2010 js">...</div> 
<div class="post-entry post-2010 js">...</div> 
<div class="post-entry post-2009 js">...</div> 
<div class="post-entry post-2009 js">...</div> 
<div class="post-entry post-2008 js">...</div> 
</div> 

所以我有一个获取的第一篇文章类的函数:

var pressClass = $('.press-wrapper div:first').attr('class').split(' ')[1]; 

,当我现在尝试删除 “的.js” 没什么happends:

$(pressClass).removeClass('js'); 

我做错了什么?

+0

您必须使用圆点为选择器加前缀。 – 2012-01-27 16:09:42

+0

@RobW不要在调用'.removeClass()'时调用' – Pointy 2012-01-27 16:12:40

+0

@Pointy在选择器:'$('。'+ pressClass)'。 class属性包含一个*空格分隔的*类名称列表。类选择器必须以点为前缀。 – 2012-01-27 16:15:05

回答

0

编辑 —我想我可能误解了这个问题,但这里的东西呢:


你试图总结你从第一次表达了作为一个jQuery对象获取的字符串,而没有合理。

真的,你应该把“class”属性看作一个向量;依赖类元素的顺序非常脆弱,特别是当您使用像jQuery这样的库时。如果你想删除的“JS”级,将其删除这样的:

$('.press-wrapper div:first').removeClass('js'); 

如果你只是想删除它时,该元素具有一定的其他类,你可以测试它:

var $firstDiv = $('.press-wrapper div:first'); 
if ($firstDiv.hasClass('post-2010')) 
    $firstDiv.removeClass('js'); 

或其他什么,以适合您的需求。

+0

我想删除最新日期的课程。所以明年,我的排序会得到一个后2012年,比这应该是可见的... – user1065862 2012-01-28 14:16:39

+0

@ user1065862以及我不确定使用类是最简单的方法来做到这一点。如果你有一个“数据年”属性和年份值本身就更容易。然后,您可以更轻松地对元素进行排序/过滤。 – Pointy 2012-01-28 14:18:18

+0

没错,我会在下一个项目中考虑它......谢谢! – user1065862 2012-01-28 15:02:32

1

你失踪,指示类

$("." + pressClass).removeClass('js'); 

点,但我不知道是否可以依赖于类名以正确的顺序每一次是!

我会建议,而不是建立一个基于别的东西像这样根据一年的字符串需要:

var year = new Date().getFullYear() 
var className = "post-" + year 
$("." + className).removeClass('js') 

如果你担心,今年将不存在试试这个:

var year = new Date().getFullYear() 
for (var i = year; i < year - 10; i--) { 
    if ($(".post-" + i).length) break; 
} 
$(".post-" + i).removeClass('js') 
+0

如果当年没有职位,该怎么办?您仍然需要从最新帖子中删除该课程。 – ShankarSangoli 2012-01-27 16:17:50

+0

那么,你有两个选择。 1)使用像这样的循环if($(“post-”+ i).length)break;''现在变量''我''将包含可用的第一年。 2)您可以使用您在服务器端列表中生成年份的任何内容,将其放入一些类似JavaScript的JavaScript中,该代码看起来像这样:'var firstYear = ;'' – 2012-01-27 17:09:08

0

var pressClass = $('.press-wrapper div:first').attr('class').split(' ')[1];会为您提供一个字符串'post-2011 . So you prefix it with .`来制作类选择器。尝试这个。

$("." + pressClass).removeClass('js'); 

你不应该依赖类的顺序。

var pressClass = $('.press-wrapper div:first').attr('class').split(' '); 
if(pressClass.lenght > 0){ 
    $.each(pressClass, function(i, class){ 
     if(class.indexOf('post-') != -1){ 
      preseClass = class; 
      return false; 
     } 
    } 
} 

然后使用pressClass和删除类

$("." + pressClass).removeClass('js'); 
0

selector是错误的。

$('.press-wrapper div:first').removeClass('js'); 
0
var pressClass = $('.press-wrapper div:first'); 
$(pressClass).removeClass('js'); 

拿出你已经知道你想要删除的内容的ATTR。只需定义你想从中删除的div。

+0

'pressClass'已经是一个jQuery对象,所以没有理由把它包装在另一个jQuery对象中。 – 2012-01-27 16:15:50

0

$('.post-entry:first-child').removeClass('js');

2

感谢的人,

到底

我想出什么样的主意:

var pressClass = $('.press-wrapper div:first').attr('class').split(' ')[1]; 
$("." + pressClass).removeClass('js'); 

真的很简单。我想要的只是获得最新的发布年份(这是自动顶级的),而不仅仅是获得同年的所有其他条目。

工作!

Thanx