2

我有一个问题,我无法弄清楚如何解决!如果您有任何想法,请协助:)

在我的 DOM 中有一堆对象,如下所示:

<div id=Line1>1</div>
<div id=Line2>2</div>
<div id=Line3>3</div>
<div id=Line4>4</div>
<div id=Line5>5</div>
<div id=Line6>6</div>
<div id=Line7>7</div>
<div id=Line8>8</div>
<div id=Line9>9</div>
<div id=Line10>10</div>

我需要得到一个包含任何 div 的 jQuery 对象,它是 Line6-10(即包含 6 或更高)......我试过玩弄 .gt() 但无济于事。

帮助将不胜感激

4

7 回答 7

5

选择<div>以 'Line' 开头的 id,然后将匹配集减少到第 5 个之后的匹配集(索引从 0 开始):

$('div[id^=Line]:gt(4)')

演示

于 2012-09-12T11:23:31.977 回答
2

这对于 jQuery 选择器是不可能的。最好的方法是slice方法:

$('div').slice(5); //select the sixth element and those after it

或者,如果您必须进行计算(例如,如果不是所有元素都存在或它们不按顺序排列),您可以执行以下操作:

$('div').filter(function() {
    return (+this.id.slice(4) >= 6);
});
于 2012-09-12T11:18:20.867 回答
1

您可以使用过滤器()

var divs = $("div[id^='Line']").filter(function(){
    var text = "Line";
    var value = this.id.split(text)[1];

    return (value > 5);
});

演示

于 2012-09-12T11:20:06.683 回答
0

如果你特别Line6Line10,你可以使用,运算符:

var q = $('#Line6,#Line7,#Line8,#Line9,#Line10');

您可以动态创建选择器,即项目 from xto y

var s = [];
for (var i = x; i <= y; i++) s.push('#Line' + i);
var q = $(s.join(','));
于 2012-09-12T11:15:42.017 回答
0

您错过了 ID 属性的引号。

<div id=Line1>1</div>
      --^

尝试使用filter方法。

$('div[id^="line"]').filter(function(){
   var = this.id.match(/\d+/g);
   return (id >= 6 && id <= 10)  
})

http://jsfiddle.net/jWY3Q/

于 2012-09-12T11:21:13.303 回答
0

试试这个

$("div[id^='Line5']").nextAll("div[id^='Line']")

关于nextAll() 的API

关于属性的 API

于 2012-09-12T11:22:58.240 回答
0

我使用Attribute Starts With Selector.filter()的解决方案。

$(function() {
   $elems = $("div[id^='Line']");
    $elems.filter(function() {
        var matches = this.id.match(/\d+/);
        var numb = parseInt(matches[0]);
        return ((numb > 5) && (numb <= 10));                
    });
});

jsFiddle在这里

于 2012-09-12T11:39:34.160 回答