假设我通过此选择器获得了$e
中存储的JQuery对象:
var $e = $("input[type='text'][value='" + v + "']");
v
表示我在$(this).val()
次迭代中获得的.each()
,但它实际上并不重要,它可以是任何数值。
我想创建一个包含$e
的JQuery元素集,在它之后的DOM元素,以及$e
之前的6个DOM元素。
函数本身工作得很好,我每次迭代都使用这个代码:
var $e = $("input[type='text'][value='" + v + "']");
$e = $e.add($e.next());
for (i=0;i<6;i++)
$e = $e.add($e.prev());
$e.remove();
我想这有点难以解释,所以请看一下JSFiddle。
我将上面的代码包含在绑定到Remove line 2
按钮的匿名函数中,该按钮会将固定的v
值传递给我的脚本。
我是JQuery的首发,即使在JQuery Selectors page阅读后,我也找不到更简单的方法。我认为.siblings()
,或更具体地JQuery('prev ~ siblings')可以用更简单的方式做到这一点,如果我可以指定jquery对象数组的范围,但我无法弄清楚如何。
HTML是通过PHP模板生成的,我宁愿避免编辑,所以我会接受不包括将给定元素包装在容器/包装器中的答案。
有没有更简单的方法来选择给定JQuery选择器的前6个元素而不将它们包装在任何容器或包装器中?
答案 0 :(得分:2)
您可以使用siblings()
和slice()
:
var $e = $("input:text[value='" + v + "']");
$e.add( $e.siblings().slice(0, 5) ).add( $e.prev() );
答案 1 :(得分:2)
尝试使用.prevAll
并切片所需的元素。见下文,
var $prevAll = $e.prevAll();
$e = $e.add($e.next()).add($prevAll.slice(0, 6));
修改:添加$e.add($e.next())
以添加下一个元素。
答案 2 :(得分:2)
我不知道它更好,但它是另一种选择:
var $siblings = $e.siblings().andSelf();
var index = $siblings.index($e);
$siblings.slice(index-6,index+2).remove();