首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript中的广度优先遍历

Javascript中的广度优先遍历
EN

Stack Overflow用户
提问于 2013-05-14 00:15:30
回答 1查看 1.6K关注 0票数 4

我想给表中的每个元素一个生成的id。请参阅下面的html表:

代码语言:javascript
复制
<table>
<tbody>
    <tr>
        <td>A1</td>
        <td>A2</td>
        <td>
            <a href="#">A3</a>
        </td>
    </tr>
    <tr>
        <td>B1</td>
        <td>B2</td>
        <td>
            <a href="#">B3</a>
        </td>
    </tr>
    <tr>
        <td>C1</td>
        <td>C2</td>
        <td>C3</td>
    </tr>
</tbody>
</table>

我想使用广度优先遍历给每个元素一个id。因此,结果如下所示:

代码语言:javascript
复制
<table>
<tbody id="0">
    <tr id="1">
        <td id="4">A1</td>
        <td id="5">A2</td>
        <td id="6">
            <a href="#" id="13">A3</a>
        </td>
    </tr>
    <tr id="2">
        <td id="7">B1</td>
        <td id="8">B2</td>
        <td id="9">
            <a href="#" id="14">B3</a>
        </td>
    </tr>
    <tr id="3">
        <td id="10">C1</td>
        <td id="11">C2</td>
        <td id="12">C3</td>
    </tr>
</tbody>
</table>

我尝试过jQuery中的each()函数为该表中的每个元素生成id,但each()函数中使用的遍历算法是预排序遍历。

有没有人能推荐我用Javascript代码来做这件事?

EN

回答 1

Stack Overflow用户

发布于 2013-05-14 00:30:26

执行breadth-first search的一种常见方法是使用队列,如下所示:

代码语言:javascript
复制
jQuery(document).ready(function () {
    var ctr = 0;
    var queue = [];

    queue.push(jQuery("table").children()); // enqueue
    while (queue.length > 0) {
        var children = queue.shift(); // dequeue
        children.each(function (ix, elem) {
            queue.push(  // enqueue
                jQuery(elem).attr("id", ctr++).children();
            );
            console.log(elem.tagName + ": " + elem.id);
        });
    }
});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16526641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档