【问题标题】:jquery - how to select the id and last element of the longest out of four arrays?jquery - 如何选择四个数组中最长的id和最后一个元素?
【发布时间】:2011-10-20 05:03:00
【问题描述】:

我的页面上有四个 DIV 元素。每个都有自己的数组,我使用 data() 附加。

根据用户交互(在页面导航上)jquery 将加载的元素 ID 存储在其中一个数组中。

设置和推送元素的工作原理如下:

$('div:jqmData(role="panel")').each(function(index) {
    if ( $(this).jqmData('hash') == 'history' ) {
         var id = $(this).jqmData('id');
         $(this).data("stack", []);
         // inital entry = startpage
         $(this).data("stack").push('#'+$(this).find('.starter').attr('id')); 
         }
}); 

添加元素:

$('div:jqmData(role="page")').bind( "pagechange", function( event) {
      var $targetPanel = $( event.target ),                 
      $targetPage = '#'+ $.mobile.path.stripHash( hash );   
      $targetPanel.data("stack").push($targetPage);
      });

我现在需要知道哪个数组最长,最后一个条目是什么?

不知道怎么做...

无法使用 maxValue 或数学,因为我只有 #pageSome、#pageOther 等条目。一定有比遍历所有数组、获取它们的长度并尝试 if-else 最高值更好的方法...

感谢您的帮助!

【问题讨论】:

    标签: jquery arrays jquery-mobile


    【解决方案1】:

    你可以使用排序方法找到最长的数组

    var arr = [];
    arr.push([1,2,3,4,5,6]);
    arr.push([1,2,3,4,5,7,8]);
    arr.push([1,2,3,4,5]);
    arr.sort(function(a,b){return b.length - a.length});
    // arr is now sorted with [0]  being the longest array
    

    然后为了对这些数组进行排序,您可以使用如下函数获取它们:

    $('div:jqmData(role="panel"),div:jqmData(role="page")').each(function(index) {
        arr.push($(this).data("stack"));
    });
    

    或者如果数组中的数据不经常更改,您可以推入数组,因为它们是在问题中指定的两个函数中构建的。

    编辑通过 cmets 获取最新信息

    那么当你想引用最长的数组并将其用作jQuery选择器时,可以使用如下代码:

    var longest = arr[0].join(",") // arr was sorted to have the first index contain the longest array
    $(longest).hide();
    

    【讨论】:

    • @frequent 不,您可以使用$('div:jqmData(role="panel"),div:jqmData(role="page")').each(function(index) {arr.push($(this).data("stack"))} 或其他什么。我的示例只是一个技术演示。
    • @frequent 我很抱歉。我应该尽量在我的答案中更明确。为了清楚起见,我会更新。
    • 好的。这有点工作。完成后我可以重置阵列。我还有更多问题:我可以拼接(-1)数组的最后一个元素,但我可以在 Jquery 语法中使用它吗?如果我收到 longest=["#menuPage"],我希望能够调用 $(longest)...。虽然不起作用。你能帮忙吗?到目前为止已经感谢您的帮助
    • @frequent 我会说这样做:var longest = arr[0].join(",")。然后你可以拨打$(longest)
    • 感谢您拯救了我的夜晚!这实际上有效......也像这样: var long = arr[arr.length-1].join(",");
    【解决方案2】:
    var longestArrayStack = function() {
        var l = Array.prototype.sort.call(arguments, function(a, b) {
            return b.length - a.length;
        });
        return l[0];
    });
    

    然后:

    var arr = [];
    $('div:jqmData(role="page")').each(function(){
        arr.push( $(this).data("stack") );
    });
    var longestArr = longestArrayStack(arr);
    

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 2011-06-04
      • 2017-11-28
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      相关资源
      最近更新 更多