更优雅/有效的方法来连续获取 6 个连续的 DOM 元素?

More elegant/efficient way to get the 6 consecutive previous DOM elements in a row?

提问人:Fabrício Matté 提问时间:5/8/2012 更新时间:5/8/2012 访问量:176

问:

假设我有一个 JQuery 对象存储在通过此选择器获取:$e

var $e = $("input[type='text'][value='" + v + "']");

v表示我在迭代中获得的内容,但实际上并不重要,它可以是任何数值。$(this).val().each()

我想创建一个 JQuery 元素集,其中包含 、 后面的 DOM 元素和 前面的 6 个 DOM 元素。$e$e

函数本身工作得很好,我在每次迭代中都使用以下代码:

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 2v

我是 JQuery 的入门者,即使在仔细阅读了 JQuery 选择器页面后,我也找不到更简单的方法来做到这一点。我认为,如果我可以指定 jquery 对象数组的范围,那么 ,或者更具体地说,JQuery('prev ~ siblings') 可以以更简单的方式做到这一点,但我不知道如何。.siblings()

HTML 是通过 PHP 模板生成的,我宁愿避免编辑,所以我会接受不包括将给定元素包装在容器/包装器中的答案。

有没有更简单的方法来选择给定 JQuery 选择器的前 6 个元素,而无需将它们包装在任何容器或包装器中?

JavaScript jQuery

评论

0赞 Selvakumar Arumugam 5/8/2012
这是>>jsfiddle.net/skram/Lf3xm/6<<接近你想要的东西吗?
0赞 Fabrício Matté 5/8/2012
值不同,但我看到似乎是我需要与前面的兄弟姐妹()放在一起的。.slice(0, 6)
0赞 Selvakumar Arumugam 5/8/2012
它确实删除了以前的 6 个兄弟姐妹,包括自我,对吧?这不就是你想要的吗?
0赞 Fabrício Matté 5/8/2012
准确地说,只是接受了你的答案。再次感谢。

答:

2赞 elclanrs 5/8/2012 #1

您可以使用 和 :siblings()slice()

var $e = $("input:text[value='" + v + "']");    

$e.add( $e.siblings().slice(0, 5) ).add( $e.prev() );

评论

0赞 James Montagne 5/8/2012
这难道不是 DOM 顺序中的前 5 个兄弟姐妹加上前 1 个吗?还是按其他顺序返回?siblings
2赞 Selvakumar Arumugam 5/8/2012 #2

尝试使用并切片您需要的元素。见下文,.prevAll

演示

    var $prevAll = $e.prevAll();
    $e = $e.add($e.next()).add($prevAll.slice(0, 6));

编辑:添加以添加下一个元素。$e.add($e.next())

评论

0赞 James Montagne 5/8/2012
只是缺少“下一个”元素。
0赞 Fabrício Matté 5/8/2012
我的问题是简化前面的元素,而且很巧妙!谢谢。正是我想要的,但我之前在 JQuery 中找不到任何对这些方法的引用。.prevAll().slice(0, 6)
2赞 James Montagne 5/8/2012 #3

我不知道它是否更好,但这是另一种选择:

    var $siblings = $e.siblings().andSelf();
    var index = $siblings.index($e);

    $siblings.slice(index-6,index+2).remove();

http://jsfiddle.net/Lf3xm/5/

评论

0赞 Selvakumar Arumugam 5/8/2012
它应该删除自我+1吗?您的演示正在删除 (self+1) ->
0赞 James Montagne 5/8/2012
@Vega是这样。“包含$e,它之后的 DOM 元素,以及$e之前的 6 个 DOM 元素。”如果你注意到在他的例子中,他有.$e.add($e.next());
0赞 Selvakumar Arumugam 5/8/2012
我明白了,这就是 OP 有 .我错过了,虽然>.<$e.add($e.next());