我有一个jQuery'each'函数循环遍历gridview。每次遇到正确的情况时,它都会创建一个新的标题并为其添加一个css类:
$(this).before('<tr><td></td><td></td><td></td><td></td><td></td></tr>');
$(this).prev().addClass('cd_header');
我的问题是,我需要根据我创建的最后一个标题的元素中的值来设置此标题的一些属性。所以单个.prev()不起作用;它只是读取我刚创建的标题的属性。
有没有办法告诉.prev我想要一两个实例回来?或者我可以以某种方式堆叠.prev()。prev()?
答案 0 :(得分:2)
或者我可以以某种方式堆叠.prev()。prev()吗?
当然可以;你可能应该尝试过。 prev
返回当前集合中每个元素的前一个兄弟的集合;没有理由你再次要求prev
再做一次这样的事情。
另一个选项是.prevAll('some-selector').first()
(prevAll
后跟first
),其中some-selector
是一个选择器,可以识别您要查找的上一个兄弟。它找到匹配选择器的所有以前的兄弟姐妹,然后获取其中的第一个(由prevAll
保证最接近你开始的那个)。这样就不那么脆弱了(例如,如果你改变一些东西来插入两个 tr
而不是某一点,它会继续工作)。
答案 1 :(得分:1)
我认为你需要做的是将注入的html分配给一个对象并获得它的优先级。所以你会得到两个先前的
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');