jquery.each()组合每次运行时的所有值

jquery.each()组合每次运行时的所有值,jquery,grouping,each,Jquery,Grouping,Each,我的目标是根据元素位置的数据集对页面上的元素进行分组。内容已经呈现到页面上,我希望在保存的事件上方的每个唯一位置都有一个位置标题。页面的结构将是类名>位置>类时 我正在做一些。每个循环都试图找到我需要的,但是我认为应该是第一个循环的单独运行的值都被组合在一起。问题是,每个循环仍在运行多次 $('.class-Info').each(function () { var className = $("h2").text(); var eventLocations = [];

我的目标是根据元素位置的数据集对页面上的元素进行分组。内容已经呈现到页面上,我希望在保存的事件上方的每个唯一位置都有一个位置标题。页面的结构将是类名>位置>类时

我正在做一些。每个循环都试图找到我需要的,但是我认为应该是第一个循环的单独运行的值都被组合在一起。问题是,每个循环仍在运行多次

$('.class-Info').each(function () 
{
    var className = $("h2").text();
    var eventLocations = [];
    $('.scheduledClass').each(function (index) 
    {
        eventLocations[index] = $(this).data("location");
    }); 

    var key = "";
    var uniqueLocations = [];
    $(eventLocations).each(function (index, location)
    {
        if (key !== eventLocations[index])
        {
            key = eventLocations[index];
            uniqueLocations.push(eventLocations[index]);
        }
     });

     console.log ("For " + className + " the locations are " + uniqueLocations);

});
这是我的密码。我希望我的问题有意义。看看控制台,看看我得到的结果


我想我明白你想在这里得到什么

如果像这样更新第一个each循环,则添加$this.find将查找当前.class信息中存在的.scheduledClass元素。以前,它只是在寻找所有的人。这会产生不同的、看似合适的控制台输出

$(this).find('.scheduledClass').each(function (index) {
    eventLocations[index] = $(this).data("location");
});

// Edit: Also make sure you select the correct "h2" by adding the $(this).find()
var className = $(this).find("h2").text();
控制台输出:

对于DocuSign管理员帐户物流培训创建DocuSign 数字工作流:模板位置待定

用于创建Docusign数字工作流:模板位置为 威利斯塔测试1,位置待定

这就是你想要的吗

jQuery有一些方便的功能,可以使代码变得更小、更干净:

$('.class-Info').each(function () {
    var className = $(this).find("h2").text(),
        eventLocations = $.map($(this).find('.scheduledClass'), function (elem) {
            return $(elem).data("location");
        }),
        uniqueLocations = $.unique(eventLocations.slice());

     console.log ("For " + className + " the locations are " + uniqueLocations);
});
-将在选定的元素上循环,并使用函数返回的项构建一个数组。 -将减少jQuery元素的数组或列表,并将其减少为仅包含唯一值的数组。 -我在eventLocations数组上调用它,因为.slice将克隆该数组。必需,因为.unique将修改它接收的数组。所以只要给它一份副本,原件就不会被修改。
只是做了一个小编辑,我意识到在.scheduledClass元素的每个循环中都没有得到正确的类名。必须添加相同的$this.find'h2'谢谢你提供的额外功能!我以前从未见过map或unique,我认识slice,但我已经忘记了。请澄清我的代码版本的解决方案。仅仅因为每个元素的迭代都在查看一个元素,并不意味着下一个jquery选择器将只查看该块的内部?定义$这是将jquery限制为第一个元素中的代码的部分?是的,没错。当您使用$'.class'这样的选择器时,它将在所有HTML中查找.class元素,但是您可以通过先选择父元素,然后像我一样调用.find来限制对某个元素的子元素的搜索。了解这在Javascript中的含义是学习代码的一个重要部分,尤其是jQuery代码。在jQuery内部。每个循环中,这是被迭代的元素。该元素也被传递到each函数中。在each函数内部,元素是第二个参数。在map函数中,它是第一个。我本可以在map函数中使用它而不是elem,代码的行为也应该是一样的。如果你在谷歌上搜索任何类似于理解jQuery的东西,你会发现大量文章用很好的例子进一步解释它