1

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

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

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

我想创建一个 JQuery 元素集,其中包含$e、之后的 DOM 元素以及之前的 6 个 DOM 元素$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 2按钮会将固定v值传递给我的脚本。

我是 JQuery 的初学者,即使在阅读了JQuery Selectors 页面之后,我也找不到更简单的方法来做到这一点。我认为,如果我可以指定 jquery 对象数组的范围.siblings(),或者更具体地说JQuery('prev ~siblings')可以以更简单的方式执行此操作,但我无法弄清楚如何。

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

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

4

3 回答 3

2

你可以使用siblings()and slice()

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

$e.add( $e.siblings().slice(0, 5) ).add( $e.prev() );
于 2012-05-07T21:45:28.417 回答
2

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

演示

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

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

于 2012-05-07T21:46:07.963 回答
2

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

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

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

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

于 2012-05-07T21:48:51.933 回答