javascript - jQuery 将多个 DOM 节点引用连接到一个列表中

标签 javascript jquery performance dom

假设我有以下 HTML:

<div class="level0">
    <div>level 0 #1</div>
    <div class="contents">
        <div class="level1">
            <div>level 1 #1</div>
            <div class="contents">
                <div class="level2"><div>level 2 #1</div></div>
            </div>
         </div>
     </div>
</div>
<div class="level0">
    <div>level 0 #2</div>
    <div class="contents">
        <div class="level1"><div>level 1 #2</div></div>
        <div class="level1"><div>level 1 #3</div></div>
        <div class="level1">
            <div>level 1 #4</div>
            <div class="contents">
                <div class="level2"><div>level 2 #2</div></div>
                <div class="level2"><div>level 2 #3</div></div>
            </div>
         </div>
    </div>
</div>
<div class="level0"><div>level 0 #3</div></div>

我想要获取对类“level0”、“level1”或“level2”的节点的所有引用。 然后我想从“level2”引用开始迭代它们,然后转到“level1”,然后“level0”。

例如,以下代码适用于我想要做的事情:

$(".level2").each(function(){
    console.log($(this).children().first().text());
});
$(".level1").each(function(){
    console.log($(this).children().first().text());
});
$(".level0").each(function(){
    console.log($(this).children().first().text());
});

这将使控制台输出如下:
2级#1
2 级 #2
2级#3
1 级#1
1 级#2
1级#3
1级#4
0级#1
0级#2
0级#3

正如您所看到的,它们按照类的顺序排列,然后按照 HTML 中从上到下的顺序排列。 这就是我想要的

但是,我想按此顺序存储此元素列表,这样我就可以对所有元素使用一个循环。

以下代码与我想要的类似,但显示以错误的顺序迭代行。

var $rows = $(".level2, .level1, .level0");
$rows.each(function(){
    console.log($(this).children().first().text());
});

这使用中序遍历来迭代行。 有没有什么方法可以将这些行附加到一个变量中,我可以按照上面我想要的顺序进行迭代?

最佳答案

我刚刚在浏览插件源代码时偶然发现了一个可行的答案。

该解决方案使用 jQuery 函数 $.merge()

以下代码完成了我想做的事情:

var $rows = $(".level2");
var $rows = $.merge($rows,$(".level1"));
var $rows = $.merge($rows,$(".level0"));

$rows.each(function(){
    console.log($(this).children().first().text());
});

我想如果你想变得更棘手一点,下面的代码也可以工作:

var $allRows = $.merge($.merge($(".level2"),$(".level1")),$(".level0"));

$allRows.each(function(){
    console.log($(this).children().first().text());
});

查看 this fiddle 看看这两个选项都有效。

关于javascript - jQuery 将多个 DOM 节点引用连接到一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18778017/

相关文章:

javascript - Canvas 和动画

JQuery 使用下拉菜单选择多个 Div

javascript - jQuery 获取先前的元素,直到包含 id 包含的元素

performance - Elasticsearch 基于时间的提要模块的最佳方法?

python - python 闭包中的条件性能

javascript - 如何从 three.js 中的场景中删除所有 Mesh 对象?

javascript - 构建所有被选中和未被选中的元素的集合

javascript - 不同按钮的切换功能

javascript - 使用 jQuery 或 JavaScript 从 url 中删除参数

c++ - 5 年后,还有比 "Fastest Possible C++ Delegates"更好的东西吗?