Javascript 子节点的XML计数

Javascript 子节点的XML计数,javascript,jquery,xml,Javascript,Jquery,Xml,xml是: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <tutorial xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- ************************************** DAY 1 MODULE 1 **************************** --> <qn day

xml是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tutorial xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!--  ************************************** DAY 1 MODULE 1 **************************** -->

<qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
        <opt id="Answer 1"></opt>
        <opt id="Answer 2"></opt>
        <opt id="Answer 3"></opt>
        <opt id="Answer 4"></opt>
</qn>
<qn day="1" module="1" id="2" qntxt="Day 1 Mod 1 Second qn?" ans="Answer 22" desc="The Correct answer is Answer1 because...">
        <opt id="Answer 21"></opt>
        <opt id="Answer 22"></opt>
        <opt id="Answer 23"></opt>
        <opt id="Answer 24"></opt>
</qn>
<qn day="1" module="1" id="3" qntxt="Day 1 Mod 1 Third qn?" ans="Answer 34" desc="The Correct answer is Answer4 because...">
        <opt id="Answer 31"></opt>
        <opt id="Answer 32"></opt>
        <opt id="Answer 33"></opt>
        <opt id="Answer 34"></opt>
</qn>
我使用-$(this).children.length;-但它给了我错误的值-我得到2-实际值将是4。

我如何才能在不进一步循环/大量修改代码的情况下获得此信息?

试试这个:-

HTML:-

<div id="test">
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<tutorial xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!--  ************************************** DAY 1 MODULE 1 **************************** -->

<qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
        <opt id="Answer 1"></opt>
        <opt id="Answer 2"></opt>
        <opt id="Answer 3"></opt>
        <opt id="Answer 4"></opt>
</qn>
<qn day="1" module="1" id="2" qntxt="Day 1 Mod 1 Second qn?" ans="Answer 22" desc="The Correct answer is Answer1 because...">
        <opt id="Answer 21"></opt>
        <opt id="Answer 22"></opt>
        <opt id="Answer 23"></opt>
        <opt id="Answer 24"></opt>
</qn>
<qn day="1" module="1" id="3" qntxt="Day 1 Mod 1 Third qn?" ans="Answer 34" desc="The Correct answer is Answer4 because...">
        <opt id="Answer 31"></opt>
        <opt id="Answer 32"></opt>
        <opt id="Answer 33"></opt>
        <opt id="Answer 34"></opt>
</qn>
    </div>

如果您正在寻找一个特定的标记,在我们的例子中,
opt
您应该将其作为一个选择传递给
.children()
,否则子项将获取标记的所有子项。但是,在您的情况下,您要计算函数对象的长度(
children
是函数对象,
children('opt')
children()
是对所述函数的调用)

请注意,在您的特定情况下,使用
.find()
将得到完全相同的数字。然而,两者之间有区别
find
将遍历DOM,从选择到树的底部。如果您的XML更改为

<qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
        <opt id="Answer 1">
             <qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
                   <opt id="Answer 1"></opt>
                   <opt id="Answer 2"></opt>
                   <opt id="Answer 3"></opt>
                   <opt id="Answer 4"></opt>
            </qn>
        </opt>
        <opt id="Answer 2"></opt>
        <opt id="Answer 3"></opt>
        <opt id="Answer 4"></opt>
</qn>

然后使用
find('opt')
选择8个元素,其中使用
children('opt')
只能得到4个元素。有关

的进一步解释,请参见此。您可以尝试$(this).find(“opt”).length来获取子元素的长度。
$(function(){
    var xml = $("#test").html();
    var xmlDoc = $.parseXML( xml );
    $(xmlDoc).find("qn").each(function(){
        alert($(this).find("opt").length);
    });    
});
$(xmlDoc).find("qn").each(function(){
    numberOfQuestions = $(this).children("opt").length;
});    
<qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
        <opt id="Answer 1">
             <qn day="1" module="1" id="1"  qntxt="Day 1 Mod 1 First qn?" ans="Answer 3" desc="The Correct answer is Answer3 because...">
                   <opt id="Answer 1"></opt>
                   <opt id="Answer 2"></opt>
                   <opt id="Answer 3"></opt>
                   <opt id="Answer 4"></opt>
            </qn>
        </opt>
        <opt id="Answer 2"></opt>
        <opt id="Answer 3"></opt>
        <opt id="Answer 4"></opt>
</qn>