2017-07-27 39 views
0

我有一个jQuery的'每个'功能,通过gridview循环。每次遇到合适的环境下时,它会创建一个新的标题,并添加CSS类到它:jQuery .prev - 我可以在之前获取实例吗?

$(this).before('<tr><td></td><td></td><td></td><td></td><td></td></tr>'); 
$(this).prev().addClass('cd_header'); 

我的问题是,我需要设置基于值这个头的一些属性在最后头的元素我创建。所以一个.prev()不起作用;它只是读取我刚刚创建的标题的属性。

是否有某种告诉.prev的方式,我希望这两个实例返回?或者我可以堆栈.prev()。prev()莫名其妙?

回答

1

我认为你需要做的是将该注入的html分配给一个对象,并得到它的prev。所以,你会得到两个分组后面

var $row = $('<tr><td></td><td></td><td></td><td></td><td></td></tr>') 
$(this).before($row); 
$row.prev().addClass('cd_header'); 

或更短

$('<tr><td></td><td></td><td></td><td></td><td></td></tr>').insertBefore($(this)).prev().addClass('cd_header'); 
+0

非常华丽,谢谢! – buckshot

2

或者我可以堆栈.prev()。prev()莫名其妙吗?

当然你可以;你可能应该尝试过。 prev返回当前集合中每个元素的前一个同胞的集合;没有理由,你不能再要求prev这样做,第二次回去一次。

另一种选择是.prevAll('some-selector').first()prevAll其次first),其中some-selector是一个选择,将确定你要查找的前一个同级。它发现全部以前的兄弟姐妹匹配选择器,然后采取其中的第一个(这是由prevAll保证是最接近你开始的地方)。这将不那么脆弱(例如,如果您改变了插入两个tr而不是某个点,它会继续工作)。

+0

嗯,我没有尝试,但我一直得到一个错误。我会继续研究我的语法。谢谢。 – buckshot

相关问题