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的东西,你会发现大量文章用很好的例子进一步解释它