Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery中使用偏移量进行迭代?_Javascript_Jquery_Iteration_Each - Fatal编程技术网

Javascript 如何在jQuery中使用偏移量进行迭代?

Javascript 如何在jQuery中使用偏移量进行迭代?,javascript,jquery,iteration,each,Javascript,Jquery,Iteration,Each,给定HTML <ol> <li>The seventh</li> <li>8th</li> <li>(10-1)</li> <li>One</li> <li>2</li> <li>Trois</li> </ol> <ol> <li>Fourth<

给定HTML

<ol>
    <li>The seventh</li>
    <li>8th</li>
    <li>(10-1)</li>
    <li>One</li>
    <li>2</li>
    <li>Trois</li>
</ol>
<ol>
    <li>Fourth</li>
    <li>5</li>
    <li>Number six</li>
</ol>​
如何调整迭代顺序,使其从元素
  • 一开始,到元素
  • (10-1)
  • 结束


    .

    也许没有什么比这更适合你的情况了:

    $.each(["one", "two", "three", "four", "five", ...], function(i, v) {
        var $this = $("li." + v);
        // ...
    });​
    

    演示:

    您不能合理地期望JavaScript在不做大量额外工作的情况下,以数字顺序智能地对英语数字进行排序。最好添加一个带有数字顺序的
    data-
    属性,然后使用简单的
    for
    循环提取这些属性

    HTML:

    
    
  • 四个
  • 五个
  • 一个
  • 两个
  • 三个
  • JS:

    var max=$('li')。长度;
    对于(var i=1;i
    

    添加一个
    排序器
    数组,并调用
    .sort()


    实例:

    不要使用诸如“一”、“二”和“三”之类的类将自己描绘成一个角落。而是自动生成一个可排序的属性值,如
    数据顺序
    ,它将以数字作为值:

    <li data-order=7>Seven</li>
    <li data-order=8>Eight</li>
    <li data-order=1>One</li>
    
    演示:

    只需使用普通JavaScript循环即可:

    var $query = $("li");
    
    var count = $query.length;
    var offset = 2;
    for(var i=0; i<count; i++) {
        var domEl = $query.get((i + offset)%count);
        //alert(domEl.getAttribute("class"));
        alert($(domEl).attr("class"));
    }
    
    var$query=$(“li”);
    var count=$query.length;
    var偏移=2;
    对于(var i=0;i给你:

    var $list = $("li");
    ​    
    for (var i=2, l = $list.length, len = l + 2; i < len; i++) {
        alert($list.eq(i % l).attr('class'));
    }​
    
    var$list=$(“li”);
    ​    
    对于(变量i=2,l=$list.length,len=l+2;i

    在jQuery中重新排序集合并不是一个好方法,但您可以使用集合长度和偏移量来生成任意循环。我将把它作为一个练习留给读者,让读者动态地计算出起始索引,我认为您需要这样做。

    您可以创建自己的方法,下面是我的做法(我花了很长时间才弄明白)

    它的工作原理与jQuery的
    each()
    方法完全相同,只是添加了offset参数

    $("li").offsetEach(integer_offset, function(index, element) {
         // iterates through all elements, but starts with an offset index
    });
    
    偏移量是从零开始的,因此对于您的示例,您可以这样做,从
    One

    $("li").offsetEach(3, function() {
         alert( $(this).text() );
    });
    


    “六”、“七”、“八”…你的解决方案太具体了,无法扩展到更大的数字。哦,突然,几秒钟后又被打败了。+1 I s'pose!@Jamiec这有点老套,但在这种情况下没有其他防弹逻辑。+1很难理解问题的背景和本质。jQuery提供了
    每个
    作为一种方便,但编写了一个loop通常很容易,除非你的具体情况有什么棘手的地方。另外,对拼写出来的数字进行排序是你问题的一个重要部分吗?我们根本不排序!我在寻找一个偏移量。你一直使用这个词。我想你希望它任意地从n
    li
    开始,然后循环到顶部?@Blazemonger这就是我的阅读方式。当你获取jQuery集合时,它会以DOM顺序返回。他希望迭代集合,从任意索引开始,但仍然覆盖整个集合。@Mathletics-是的!我宣布你是我的新最好的朋友。你是对的-它不会对英文数字排序,但你可以教它这样做;)对已知的、数量有限的单词这样做是微不足道的。但是运算是否会在8点停止,或者可能会上升到22点?将英语数字解析为整数是一个复杂而独特的问题。最好的解决方案是绕过它。pfft,它可能会上升到100万,同样的解决方案仍然有效,你只要ave构造数组。@Jamiec这只是一个最字面意义上的解决方案。我们不能鼓励这种疯狂行为。提供一个表示字符串排序顺序的数组有什么疯狂之处?它们可以是英语数字,也可以是动物物种,或者任何你想确定排序顺序的基于语言的字符串。I我已经无数次地使用过这种技术,但我看不出它有什么疯狂之处评论有点陈腐,但在我看来这个概念是合理的。实际上我更喜欢这个解决方案;我随意选择类名是为了可读性,而没有意识到它们会提供一个新的解决方案!@RichardJPLeGuen-重要的不是你想用什么来排列你的元素,重要的是你有一些可以用来de>indexOf
    到一个用于定义排序器的数组中。您的演示似乎没有做您想做的事情。@Blazemonger事实上,它做了……它为您做了什么?@Blazemonger是的,集合在JavaScript中是以零为基础的,因此第7项在索引6,eigth在索引7,第一项在索引0。这就是为什么
    ['foo'][0]
    返回
    'foo'
    ,而
    ['foo'][1]
    不返回。这是我的答案的更好版本。@Mathletics-我有点希望你没有删除答案;现在我必须记住在两天后回到这个问题来接受我的答案。取消删除,尽管我保留你的答案更好。
    <li data-order=7>Seven</li>
    <li data-order=8>Eight</li>
    <li data-order=1>One</li>
    
    $('li[data-order]').sort(sortByData).text(changeText);
    
    function sortByData (one, two) {
        return $(one).data("order") - $(two).data("order");
    }
    
    function changeText (index, value) {
       return index + " " + value; 
    }
    
    var $query = $("li");
    
    var count = $query.length;
    var offset = 2;
    for(var i=0; i<count; i++) {
        var domEl = $query.get((i + offset)%count);
        //alert(domEl.getAttribute("class"));
        alert($(domEl).attr("class"));
    }
    
    var $list = $("li");
    ​    
    for (var i=2, l = $list.length, len = l + 2; i < len; i++) {
        alert($list.eq(i % l).attr('class'));
    }​
    
    $.fn.offsetEach = function(offset, cb) {
      $(this.get().splice(offset).concat(this.get().splice(0,offset))).each(cb);
    }
    
    $("li").offsetEach(integer_offset, function(index, element) {
         // iterates through all elements, but starts with an offset index
    });
    
    $("li").offsetEach(3, function() {
         alert( $(this).text() );
    });