jQuery使用.nextAll()背靠背显示相邻的XML兄弟节点

时间:2014-04-11 05:08:10

标签: javascript jquery xml

我有以下XML:

<building>
    <id>1</id>
    <name>Annex</name>
    <rooms>
        <room>
            <number>100</number>
            <type>conference room</type>
            <capacity>4</capacity>
        </room>
        <room>
            <number>203</number>
            <type>computer lab</type>
            <capacity>30</capacity>
        </room>
    </rooms>
</building>

我在jQuery函数中有一些块,它们解析XML文件的特定父节点,例如<number>。我还有一些其他.on(click)函数将<number>的{​​{1}}作为.text()参数传递,usd显示每次点击所需的getNum()。无论如何,这是成功的,但是现在我正在尝试显示的不仅仅是<number>节点,如您所见。我还尝试显示<number>节点的兄弟文本<number><type>。我尝试过使用<capacity>函数,但它似乎跳过了一个节点。到目前为止,我唯一能完成中途工作的是使用.next()函数;我说中途因为,根据参数,我可以只获取.nextAll(arg)节点或<type>节点进行打印,而不是两者。更奇怪的是,使用<capacity>似乎有效的唯一参数没有逻辑意义(参见下面的代码注释);我发现.nextAll()1只显示相应的节点,而不是2-1。这些价值观对我来说没有意义,有人能理解为什么吗?

0

尽管如此,我的主要关注点和总体问题是如何声明多个陈述;因为我只能出现一个或另一个,为什么我不能同时声明这个:$room.find('rooms room number').each(function () { if (getNum() == $(this).text()) { var $numDiv = $('<div>', { text: '- Room ' + $(this).text(), id: $(this).text() }).appendTo($div); /////////////////////////////////////////// // This SKIPS <type> node and displays <capacity> node // $(this).next().appendTo($div); /////////////////////////////////////////// // This displays <type> node // $(this).nextAll().eq(-1).appendTo($div); /////////////////////////////////////////// // This displays <capacity> node // $(this).nextAll().eq(0).appendTo($div); /////////////////////////////////////////// // This displays neither node. Why? // $(this).nextAll().eq(-1).appendTo($div); // $(this).nextAll().eq(0).appendTo($div); } }); return $div; 和这个:$(this).nextAll().eq(-1).appendTo($div);背靠背?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,但是我仍然不完全理解为什么先前的陈述不起作用。无论如何,这就是我必须做的事情:

// Declare each node in its on HTML tag.
$('<h4>', { text: $(this).nextAll().eq(0).text(), class: 'roomText' }).appendTo($div);
$('<h4>', { text: $(this).nextAll().eq(1).text(), class: 'roomText' }).appendTo($div);

如果有人能够解释那些很棒的逻辑。