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
对象!
使用 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
对象!