2

我正在尝试使用num类删除一些对象。

html:

<a class='num'>1</a>
<a class='num'>2</a>
<a class='num'>3</a>
<a class='num numa'>4</a>
<a class='num'>5</a>
<a class='num'>6</a>
<a class='num'>7</a>
<a class='num'>8</a>
<a class='num'>9</a>
<a class='num'>10</a>

但我也想保持周围的物体numa

我想在numaplus之前保留三个对象和三个对象numa

这是我的尝试:

<script>
    var ind = $('.num:contains("4")').index();
    for(i=0; i<$('.num').size(); i++)
    {
        if(i<ind-3 || i>ind+3) $('.page_num:eq('+ind+')').remove();
    }
</script>

任何的想法?

4

4 回答 4

3

您可以使用slice方法并使用方法排除元素not。由于index使用了方法,如果元素不是页面中的兄弟元素,它也会选择并删除它们。

var $e = $('a.num'),
    $t = $e.filter('.numa'),
    i  = $e.index($t), 
    $k = $e.slice(i-3, i+4);

$e.not($k).remove();

http://jsfiddle.net/WnDS2/

编辑:正如您的小提琴演示的那样,如果传递给slice方法的第一个参数是负数,slice则方法不会过滤元素,您可以检查所选元素的长度以及减法的结果是否为负数集它为 0。

http://jsfiddle.net/WnDS2/5/

于 2013-04-21T07:41:05.880 回答
1

首先使用属性选择器获取特定锚标记的索引,然后使用.each函数遍历所有 a 元素并使用以下逻辑删除所需的东西,试试这个,

 var xIndex=$("a[class='num numa']").index()

      $("a").each(function(i)
                  {
             if(xIndex - 3 > i || xIndex + 3 < i)
                {
                  $(this).remove();
                }
                  })

演示

于 2013-04-21T08:17:20.513 回答
0
Try This: 
var index = $(".numa").index();
$(".numa").siblings().slice(index,index + 3).remove();
$(".numa").siblings().slice(index - 3, index).remove();
于 2013-04-21T07:55:10.060 回答
0

您可以使用:nth-child选择器:

var ind = $('.numa').index();
$('.num:nth-child(-n+'+(ind-3 >= 0 ? ind-3 : 0)+'), .num:nth-child(n+'+(ind+5)+')').remove();

http://jsfiddle.net/AgbAU/1/

该部分ind-3 >= 0 ? ind-3 : 0防止出现nth-child(-n+-1)语法不正确的情况。

filter 方法也很有用:

var ind = $('.numa').index();
$('.num').filter(function() {
    var i = $(this).index();
    return i < ind - 3 || i > ind + 3;
}).remove();

http://jsfiddle.net/AgbAU/2/

于 2013-04-21T08:07:14.850 回答