在xsl中设置计数器以设置tabIndex

时间:2017-12-01 13:10:25

标签: javascript html xslt-1.0

我编写了一些XSL代码,它读取XML文件并为每个子节点创建text类型的输入元素。考虑以下XML文件,对于节点c,将创建两个输入框,如

标签(com 1):输入框---------------------标签(com 2):输入框

节点c下可以有任意数量的子节点,也可以有任意数量的节点,例如c。如果为c下的子节点填充HTML页面上的一行,则将创建另一行。我希望用户能够从一个输入框移动到同一行的下一个输入框,而不是下一行的输入框。

我想为使用XSL生成的每个输入元素设置选项卡索引。我需要计算一个父节点下的子节点数,以便为下一个父元素的子节点设置选项卡索引。

<Base>          
            <C>
                <Label>Af</Label>
                <Column>
                    <Label>Com 1</Label>
                    <Max>200</Max>                  
                </Column>
                <Column>
                    <Label>Com 2</Label>
                    <max>100</max>                  
                </Column>
            </C>

            <D>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>40</max>   
                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>340</max>                      
                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>340</max>                      
                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>40</max>                       
                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>

                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>

                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>

                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>A</Label>
                        <max>40</max>

                    </Column>
                    <Column>
                        <Label>B</Label>
                        <max>40</max>

                    </Column>
                    <Column>
                        <Label>C</Label>
                        <max>40</max>

                    </Column>
                    <Column>
                        <Label>D</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <Row>
                    <Column>
                        <Label>E</Label>
                        <max>40</max>                       
                    </Column>
                </Row>
                <GColumn>
            </Base> 

由于XSL是一种函数式语言,我无法找到一种设置变量的方法,并在为每个循环执行一次之后递增它。需要一些帮助来维护基于我可以设置tabindex的元素数。

1 个答案:

答案 0 :(得分:0)

您不必在循环中计算元素,您可以使用position()

在For-Each循环中获取元素的索引
<xsl:variable name="itempos" select="position()"/>

使用count()

获取子元素的总数
<xsl:variable name="itemcount" select="count(/Base/c/*)"/>