JQuery children 循环 XML

JQuery children loop XML

使用 JQuery 和 AJAX,我得到一个 XML 文档,然后遍历该文档以尝试在 XML 的每个级别上做一些事情tags/nodes,从parent到children,然后分别是children和children。

我目前使用的是什么,但专门写到 children 的 children 的 children 的限制(不理想)。

最终申请可能有 children 的开放人数来执行操作。

How can i make this account for any number of children without the inefficiency?

我已经尝试根据我希望在每个 child 级别实现的目标来制作功能。但这并没有像预期的那样工作,基本上破坏了脚本。

函数

function childX() {
    $(this).children().each(function()
    {
       $("#output").append("<div id='"+(this).nodeName+"'>"+(this).nodeName+"</div><br />");
    });
}

主脚本

  $(xml).find("RecentTutorials").children().each(function()
  {

    $("#output").append("<div id='"+(this).nodeName+"'>"+(this).nodeName+"</div><br />");


    $(this).children().each(function()
    {
       $("#output").append("<div id='"+(this).nodeName+"'>"+(this).nodeName+"</div><br />");

      $(this).children().each(function()
        {
           $("#output").append("<div id='"+(this).nodeName+"'>"+(this).nodeName+"</div><br />");

            $(this).children().each(function()
            {
               $("#output").append("<div id='"+(this).nodeName+"'>"+(this).nodeName+"</div><br />");

            });

        });

    });


  //alert((this).nodeName);
  }); 

执行此操作的最简单方法可能是使用递归函数 - 即调用自身的函数。

addChildren( $(xml).find("RecentTutorials") );

function addChildren( $parent ) {
    $parent.children().each( function( i, child ) {
        $("#output").append(
            "<div id='" + child.nodeName + "'>" +
                child.nodeName +
            "</div><br />"
        );
        addChildren( $(child) );
    });
}

对于一个有趣的测试用例,请尝试在任何使用 jQuery 的页面上打开 JavaScript 控制台 - 例如我们现在所在的页面 - 并粘贴以下类似代码:

logChildren( $(document.body) );

function logChildren( $parent ) {
    $parent.children().each( function( i, child ) {
        console.log( child.nodeName );
        logChildren( $(child) );
    });
}

它将为页面中的每个元素打印 nodeName

顺便说一句,我建议您在使用 jQuery.each() 时不要使用 this$(this)。相反,使用我的示例中的显式参数名称。这样更容易理解代码,也更不容易出错。这是您的 childX() 函数根本不起作用的部分原因。它在第一行引用了 this,但是当你直接调用一个函数时,this 不太可能是你所期望的:除非你使用严格模式,否则 this 是对window 对象!