Как динамически заполнить раскрывающееся меню? - PullRequest
0 голосов
/ 08 апреля 2019

Я получил некоторый код (HTML и JavaScript), который создает таблицу с тремя столбцами и динамическими строками.Я хотел бы иметь выпадающее меню на основе записей моего первого столбца.Таким образом, раскрывающееся меню должно быть заполнено после того, как моя таблица заполнена.Первый столбец может иметь несколько одинаковых записей.Так что их нужно показывать только один раз в моем выпадающем меню.На данный момент у меня есть только статическое выпадающее меню.Смотрите код ниже.Программа работает для статического выпадающего меню очень хорошо.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <table id="myTable">
        <colgroup>
            <col width="150" style="background-color:red"></col>
            <col width="165"></col>
        </colgroup>
        <tr  style ="background-color:grey">
            <th>plane
                <select id="modelRangeDropdown" onchange="filterReports()">
                    <option selected="selected">All</option>
                    <option>number1</option>
                    <option>number2</option>                        
                </select>                   
            </th>   
            <th>Datum</th>
            <th>Secret</th>
        </tr>
        <xsl:for-each select="logstore/plane/trigger">
            <tr>
                <td><xsl:value-of select="../Name"/></td>
                <td><xsl:value-of select="date"/></td>
                <td><xsl:value-of select="secret"/></td>
            </tr>
        </xsl:for-each>
    </table>
    <script type="text/javascript" src="/../../../filterReports.js"></script>           
</body>
</html>
</xsl:template>
</xsl:stylesheet>

1 Ответ

0 голосов
/ 08 апреля 2019

Если бы вы могли использовать XSLT 2.0, вы могли бы использовать distinct-values и написать xsl:for-each примерно так

<select id="modelRangeDropdown" onchange="filterReports()">
    <option selected="selected">All</option>
    <xsl:for-each select="distinct-values(logstore/plane/Name)">
        <option value="{.}">
            <xsl:value-of select="." />
        </option>
    </xsl:for-each>
</select>  

С другой стороны, если вы ограничены XSLT 1.0, вам нужно будет использовать технику, называемую Muenchian Grouping . Вы бы определили ключ так:

<xsl:key name="planes" match="plane/Name" use="." />

Затем, чтобы получить различные значения, вы должны сделать это .....

<select id="modelRangeDropdown" onchange="filterReports()">
    <option selected="selected">All</option>
    <xsl:for-each select="logstore/plane/Name[generate-id() = generate-id(key('planes', .)[1])]">
        <option value="{.}">
            <xsl:value-of select="." />
        </option>
    </xsl:for-each>                    
</select>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...