テーブルをいじる。その5!(途中経過)
夕方から今までやって、これだけか〜。情けない。
テーブルの初期化の段階でマークして、querySelectorAll で集めるほうが簡単か。)
<!DOCTYPE html> <title></title> <style type="text/css"> thead th { background : #66c; border : 1px #88f outset; color : #cfc; height :4em; } tr[aria-hidden="true"] { visibility: collapse; } tbody th { background-color: #ddf; text-align: left; text-indent: 1ex; border :2px #ccf outset; } tbody td { text-indent: 0.6ex; border-bottom :1px #ccf dotted; border-right :1px #ccf dotted; } body { font-size:70%; } </style> <form> <p> <select onchange="table.find(new RegExp( this.value ), 2)"> <option value="">- <option value="なし">なし <option value="menu">menu <option value="listbox">listbox <option value="head">head </select> <select onchange="table.find(new RegExp( this.value ), 3)"> <option value="">- <option value="ない">ない <option value="変更">変更 <option value="指定">指定 </select> <select onchange="table.limit(+this.value)"> <option value="100">- <option value="1">1件 <option value="5">5件 <option value="10">10件 </select> <input type="checkbox" id="sort">(逆順) <select onchange=" table.sort( (this.form.elements['sort'].checked ? '-': '') + this.value); "> <option value="">ソートします <option value="0">項目1 <option value="1">項目2 <option value="2">項目3 <option value="3">項目4 </select> <input type="button" value="Reverse" onclick="table.reverse ()"> <input type="button" value="Reset" onclick="table.reset ()"> </p> </form> <!-- <table id="fuga"> <tr><td>1</td><td>1</td><td>abc</td><td>11ccbwucbwikbcwb</td></tr> <tr><td>2</td><td>2</td><td>def</td><td>15ccbwucbwikbcwb</td></tr> <tr><td>3</td><td>5</td><td>ghq</td><td>31ccbwucbwikbcwb</td></tr> <tr><td>4</td><td>2</td><td>rst</td><td>61ccbwucbwikbcwb</td></tr> <tr><td>5</td><td>2</td><td>uvw</td><td>22ccbwucbwikbcwb</td></tr> </table> --> <table id="HOGE"> <thead> <tr><th>No.</th><th>言語特徴</th><th>デフォルトロール</th><th>備考</th></tr></thead> <tbody> <tr><th colspan="4">ルート要素</th></tr> <tr><td>1</td><td><code>html</code></td><td>なし</td><td>変更不可。</td></tr></tbody> <tbody> <tr><th colspan="4">文書メタデータ</th></tr></tbody> <tr><td>1</td><td><code>head</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>2</td><td><code>title</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>3</td><td><code>base</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>4</td><td><code>link</code>(疑似クラス <code>:link</code> にマッチするもの)</td><td><code>"link"</code></td><td>変更不可。</td></tr> <tr><td>5</td><td><code>meta</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>6</td><td><code>style</code></td><td>なし</td><td>変更不可。</td></tr></tbody> <tbody> <tr><th colspan="4">スクリプティング</th></tr> <tr><td>1</td><td><code>script</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>2</td><td><code>noscript</code></td><td> </td><td> </td></tr></tbody> <tbody><tr><th colspan="4">セクション関連</th></tr> <tr><td>1</td><td><code>body</code></td><td><code>"document"</code></td><td><code>"document"</code> か <code>"application"</code> でなければならない。</td></tr> <tr><td>2</td><td><code>section</code></td><td><code>"region"</code></td><td><code>"region"</code>, <code>"document"</code>, <code>"application"</code>, <code>"contentinfo"</code>, <code>"main"</code>, <code>"search"</code>, <code>"alert"</code>, <code>"dialog"</code>, <code>"alertdialog"</code>, <code>"status"</code>, <code>"log"</code> のどれかでなければならない。</td></tr> <tr><td>3</td><td><code>nav</code></td><td><code>"navigation"</code></td><td>変更不可。</td></tr> <tr><td>4</td><td><code>article</code></td><td><code>"article"</code></td><td><code>"article"</code>, <code>"document"</code>, <code>"application"</code>, <code>"main"</code> のどれかでなければならない。</td></tr> <tr><td>5</td><td><code>aside</code></td><td><code>"note"</code></td><td><code>"note"</code>, <code>"complementary"</code>, <code>"search"</code> のどれかでなければならない。</td></tr> <tr><td>6</td><td><code>h1</code>(<code>hgroup</code> に含まれないもの)</td><td><code>"heading"</code></td><td>変更不可。<code>@aria-level</code> は当該要素のアウトライン深度。</td></tr> <tr><td>7</td><td><code>h2</code>(<code>hgroup</code> に含まれないもの)</td><td><code>"heading"</code></td><td>変更不可。<code>@aria-level</code> は当該要素のアウトライン深度。</td></tr> <tr><td>8</td><td><code>h3</code>(<code>hgroup</code> に含まれないもの)</td><td><code>"heading"</code></td><td>変更不可。<code>@aria-level</code> は当該要素のアウトライン深度。</td></tr> <tr><td>9</td><td><code>h4</code>(<code>hgroup</code> に含まれないもの)</td><td><code>"heading"</code></td><td>変更不可。<code>@aria-level</code> は当該要素のアウトライン深度。</td></tr> <tr><td>10</td><td><code>h5</code>(<code>hgroup</code> に含まれないもの)</td><td><code>"heading"</code></td><td>変更不可。<code>@aria-level</code> は当該要素のアウトライン深度。</td></tr> <tr><td>11</td><td><code>h6</code>(<code>hgroup</code> に含まれないもの)</td><td><code>"heading"</code></td><td>変更不可。<code>@aria-level</code> は当該要素のアウトライン深度。</td></tr> <tr><td>12</td><td><code>hgroup</code></td><td><code>"heading"</code></td><td>変更不可。<code>@aria-level</code> は当該要素のアウトライン深度。</td></tr> <tr><td>13</td><td><code>header</code></td><td>なし</td><td>指定するなら <code>"banner"</code> でなければならない。</td></tr> <tr><td>14</td><td><code>footer</code></td><td>なし</td><td>指定するなら <code>"contentinfo"</code> でなければならない。</td></tr> <tr><td>15</td><td><code>address</code></td><td>なし</td><td>指定するなら <code>"contentinfo"</code> でなければならない。</td></tr></tbody> <tbody> <tr><th colspan="4">グループ化内容</th></tr> <tr><td>1</td><td><code>p</code></td><td> </td><td> </td></tr> <tr><td>2</td><td><code>hr</code></td><td><code>"separator"</code></td><td>変更不可。</td></tr> <tr><td>3</td><td><code>pre</code></td><td> </td><td> </td></tr> <tr><td>4</td><td><code>blockquote</code></td><td> </td><td> </td></tr> <tr><td>5</td><td><code>ol</code></td><td><code>"list"</code></td><td><code>"directory"</code>, <code>"list"</code>, <code>"listbox"</code>, <code>"menu"</code>, <code>"menubar"</code>, <code>"tablist"</code>, <code>"toolbar"</code>, <code>"tree"</code> のどれかでなければならない。</td></tr> <tr><td>6</td><td><code>ul</code></td><td><code>"list"</code></td><td><code>"directory"</code>, <code>"list"</code>, <code>"listbox"</code>, <code>"menu"</code>, <code>"menubar"</code>, <code>"tablist"</code>, <code>"toolbar"</code>, <code>"tree"</code> のどれかでなければならない。</td></tr> <tr><td>7</td><td><code>li</code>(ul か ol の子)</td><td><code>"listitem"</code></td><td><code>"listitem"</code>, <code>"menuitemcheckbox"</code>, <code>"menuitemradio"</code>, <code>"option"</code>, <code>"tab"</code>, <code>"treeitem"</code> のどれかでなければならない。</td></tr> <tr><td>8</td><td><code>dl</code></td><td> </td><td> </td></tr> <tr><td>9</td><td><code>dt</code></td><td> </td><td> </td></tr> <tr><td>10</td><td><code>dd</code></td><td> </td><td> </td></tr> <tr><td>11</td><td><code>figure</code></td><td> </td><td> </td></tr> <tr><td>12</td><td><code>figcaption</code></td><td> </td><td> </td></tr> <tr><td>13</td><td><code>div</code></td><td> </td><td> </td></tr></tbody> <tbody> <tr><th colspan="4">テキストレベル意味論</th></tr> <tr><td>1</td><td><code>a:link</code>(疑似クラス :link にマッチするもの)</td><td><code>"link"</code></td><td> </td></tr> <tr><td>2</td><td><code>em</code></td><td> </td><td> </td></tr> <tr><td>3</td><td><code>strong</code></td><td> </td><td> </td></tr> <tr><td>4</td><td><code>small</code></td><td> </td><td> </td></tr> <tr><td>5</td><td><code>s</code></td><td> </td><td> </td></tr> <tr><td>6</td><td><code>cite</code></td><td> </td><td> </td></tr> <tr><td>7</td><td><code>q</code></td><td> </td><td> </td></tr> <tr><td>8</td><td><code>dfn</code></td><td> </td><td> </td></tr> <tr><td>9</td><td><code>abbr</code></td><td> </td><td> </td></tr> <tr><td>10</td><td><code>time</code></td><td> </td><td> </td></tr> <tr><td>11</td><td><code>code</code></td><td> </td><td> </td></tr> <tr><td>12</td><td><code>var</code></td><td> </td><td> </td></tr> <tr><td>13</td><td><code>samp</code></td><td> </td><td> </td></tr> <tr><td>14</td><td><code>kbd</code></td><td> </td><td> </td></tr> <tr><td>15</td><td><code>sub</code></td><td> </td><td> </td></tr> <tr><td>16</td><td><code>sup</code></td><td> </td><td> </td></tr> <tr><td>17</td><td><code>i</code></td><td> </td><td> </td></tr> <tr><td>18</td><td><code>b</code></td><td> </td><td> </td></tr> <tr><td>19</td><td><code>mark</code></td><td> </td><td> </td></tr> <tr><td>20</td><td><code>ruby</code></td><td> </td><td> </td></tr> <tr><td>21</td><td><code>rt</code></td><td> </td><td> </td></tr> <tr><td>22</td><td><code>rp</code></td><td> </td><td> </td></tr> <tr><td>23</td><td><code>bdo</code></td><td> </td><td> </td></tr> <tr><td>24</td><td><code>span</code></td><td> </td><td> </td></tr> <tr><td>25</td><td><code>br</code></td><td> </td><td> </td></tr> <tr><td>26</td><td><code>wbr</code></td><td> </td><td> </td></tr></tbody> <tbody> <tr><th colspan="4">編集</th></tr> <tr><td>1</td><td><code>ins</code></td><td> </td><td> </td></tr> <tr><td>2</td><td><code>del</code></td><td> </td><td> </td></tr></tbody> <tbody> <tr><th colspan="4">埋め込み内容</th></tr> <tr><td>1</td><td><code>img</code>(<code>@alt=""</code> のもの)</td><td><code>"presentation"</code></td><td>変更不可。</td></tr> <tr><td>2</td><td><code>img</code>(<code>@alt</code> のないもの)</td><td><code>"img"</code></td><td>制限なし。</td></tr> <tr><td>3</td><td><code>iframe</code></td><td>なし</td><td>指定するなら <code>"application"</code>, <code>"document"</code>, <code>"img"</code> のどれかでなければならない。</td></tr> <tr><td>4</td><td><code>embed</code></td><td>なし</td><td>指定するなら <code>"application"</code>, <code>"document"</code>, <code>"img"</code> のどれかでなければならない。</td></tr> <tr><td>5</td><td><code>object</code></td><td>なし</td><td>指定するなら <code>"application"</code>, <code>"document"</code>, <code>"img"</code> のどれかでなければならない。</td></tr> <tr><td>6</td><td><code>param</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>7</td><td><code>video</code></td><td>なし</td><td>指定するなら <code>"application"</code> でなければならない。</td></tr> <tr><td>8</td><td><code>audio</code></td><td>なし</td><td>指定するなら <code>"application"</code> でなければならない。</td></tr> <tr><td>9</td><td><code>source</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>10</td><td><code>track</code></td><td> </td><td> </td></tr> <tr><td>11</td><td><code>canvas</code></td><td> </td><td> </td></tr> <tr><td>12</td><td><code>map</code></td><td> </td><td> </td></tr> <tr><td>13</td><td><code>area:link</code></td><td><code>"link"</code></td><td> </td></tr></tbody> <tbody> <tr><th colspan="4">表</th></tr> <tr><td>1</td><td><code>table</code></td><td><code>"grid"</code></td><td><code>"grid"</code>, <code>"treegrid"</code> のどれかでなければならない。</td></tr> <tr><td>2</td><td><code>caption</code></td><td> </td><td> </td></tr> <tr><td>3</td><td><code>colgroup</code></td><td> </td><td> </td></tr> <tr><td>4</td><td><code>col</code></td><td> </td><td> </td></tr> <tr><td>5</td><td><code>tbody</code></td><td> </td><td> </td></tr> <tr><td>6</td><td><code>thead</code></td><td> </td><td> </td></tr> <tr><td>7</td><td><code>tfoot</code></td><td> </td><td> </td></tr> <tr><td>8</td><td><code>tr</code></td><td><code>"row"</code></td><td> </td></tr> <tr><td>9</td><td><code>td</code></td><td><code>"gridcell"</code></td><td><code>@aria-labelledby</code> は当該要素の <code>@headers</code> を反映。</td></tr> <tr><td>10</td><td><code>th</code>(列ヘッダ)</td><td><code>"columnheader"</code></td><td><code>@aria-labelledby</code> は <code>@headers</code> を反映。</td></tr> <tr><td>11</td><td><code>th</code>(行ヘッダ)</td><td><code>"rowheader"</code></td><td><code>@aria-labelledby</code> は <code>@headers</code> を反映。</td></tr> <tr><td>12</td><td><code>th</code>(列ヘッダでも行ヘッダでもないもの)</td><td><code>"gridcell"</code></td><td><code>@aria-labelledby</code> は当該要素の <code>@headers</code> を反映。</td></tr></tbody> <tbody> <tr><th colspan="4">フォーム</th></tr> <tr><td>1</td><td><code>form</code></td><td> </td><td> </td></tr> <tr><td>2</td><td><code>fieldset</code></td><td> </td><td> </td></tr> <tr><td>3</td><td><code>legend</code></td><td> </td><td> </td></tr> <tr><td>4</td><td><code>label</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>5</td><td><code>input</code>(@type=<code>"checkbox"</code>)</td><td><code>"checkbox"</code></td><td><code>"checkbox"</code>, <code>"menuitemcheckbox"</code> のどれかでなければならない。<code>@aria-checked</code> は、当該要素に <code>@indeterminate</code> があれば <code>"mixed"</code>、さもなくばチェック状態を反映。</td></tr> <tr><td>6</td><td><code>input</code>(@type=<code>"radio"</code>)</td><td><code>"radio"</code></td><td><code>"radio"</code>, <code>"menuitemradio"</code> のどれかでなければならない。<code>@aria-checked</code> は当該要素のチェック状態を反映。</td></tr> <tr><td>7</td><td><code>input</code>(@type=<code>"datetime"</code>)</td><td>なし</td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>8</td><td><code>input</code>(@type="datetime-local")</td><td>なし</td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>9</td><td><code>input</code>(@type=<code>"date"</code>)</td><td>なし</td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>10</td><td><code>input</code>(@type=<code>"month"</code>)</td><td>なし</td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>11</td><td><code>input</code>(@type=<code>"week"</code>)</td><td>なし</td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>12</td><td><code>input</code>(@type=<code>"time"</code>)</td><td>なし</td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>13</td><td><code>input</code>(@type=<code>"reset"</code>)</td><td><code>"button"</code></td><td>変更不可。</td></tr> <tr><td>14</td><td><code>input</code>(@type=<code>"submit"</code>)</td><td><code>"button"</code></td><td>変更不可。</td></tr> <tr><td>15</td><td><code>input</code>(@type=<code>"file"</code>)</td><td><code>"button"</code></td><td>変更不可。</td></tr> <tr><td>16</td><td><code>input</code>(@type=<code>"image"</code>)</td><td><code>"button"</code></td><td>変更不可。</td></tr> <tr><td>17</td><td><code>input</code>(@type=<code>"hidden"</code>)</td><td>なし</td><td>変更不可。</td></tr> <tr><td>18</td><td><code>input</code>(@type=<code>"color"</code>)</td><td>なし</td><td>変更不可。</td></tr> <tr><td>19</td><td><code>input</code>(@type=<code>"number"</code>)</td><td><code>"spinbutton"</code></td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。<code>@aria-valuemax</code>、<code>@aria-valuemin</code>、<code>@aria-valuenow</code> は当該要素を反映。</td></tr> <tr><td>20</td><td><code>input</code>(@type=<code>"range"</code>)</td><td><code>"slider"</code></td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。<code>@aria-valuemax</code>、<code>@aria-valuemin</code>、<code>@aria-valuenow</code> は当該要素を反映。</td></tr> <tr><td>21</td><td><code>input</code>(@type="text, search, tel, url, email" でサジェストソースを持つもの)</td><td><code>"combobox"</code></td><td>変更不可。<code>@aria-owns</code> は当該要素の @list を反映。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>22</td><td><code>input</code>(@type=<code>"text"</code> でサジェストソースを持たないもの)</td><td><code>"textbox"</code></td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>23</td><td><code>input</code>(@type=<code>"search"</code> でサジェストソースを持たないもの)</td><td><code>"textbox"</code></td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>24</td><td><code>input</code>(@type=<code>"tel"</code> でサジェストソースを持たないもの)</td><td><code>"textbox"</code></td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>25</td><td><code>input</code>(@type=<code>"email"</code> でサジェストソースを持たないもの)</td><td><code>"textbox"</code></td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>26</td><td><code>input</code>(@type=<code>"password"</code>)</td><td><code>"textbox"</code></td><td>変更不可。<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>27</td><td><code>button</code></td><td><code>"button"</code></td><td>変更不可。</td></tr> <tr><td>28</td><td><code>select</code>(<code>@multiple</code> を持つもの)</td><td><code>"listbox"</code></td><td>変更不可。<code>@aria-multiselectable</code> が <code>"true"</code>。</td></tr> <tr><td>29</td><td><code>select</code>(<code>@multiple</code> を持たないもの)</td><td><code>"listbox"</code></td><td>変更不可。<code>@aria-multiselectable</code> が <code>"false"</code>。</td></tr> <tr><td>30</td><td><code>datalist</code></td><td><code>"listbox"</code></td><td>変更不可。<code>@aria-multiselectable</code> が <code>"false"</code>。</td></tr> <tr><td>31</td><td><code>option</code></td><td><code>"option"</code></td><td>変更不可。<code>@aria-selected</code> は当該要素の選択状態を反映。</td></tr> <tr><td>32</td><td><code>textarea</code></td><td><code>"textbox"</code></td><td>変更不可。<code>@aria-multiline</code> が <code>"true"</code>、<code>@aria-readonly</code> は当該要素の <code>@readonly</code> を反映。</td></tr> <tr><td>33</td><td><code>keygen</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>34</td><td><code>output</code></td><td><code>"status"</code></td><td>制限なし。</td></tr> <tr><td>35</td><td><code>progress</code></td><td><code>"progressbar"</code></td><td>変更不可。<code>@aria-valuemin</code> は "0"、<code>@aria-valuemax</code>、<code>@aria-valuenow</code> は当該要素を反映。</td></tr> <tr><td>36</td><td><code>meter</code></td><td>なし</td><td>変更不可。</td></tr> <tr><td>37</td><td><code>:disabled</code> な要素</td><td> </td><td><code>@aria-disabled</code> が <code>"true"</code>。</td></tr> <tr><td>38</td><td><code>:required</code> な要素</td><td> </td><td><code>@aria-required</code> が <code>"true"</code>。</td></tr> <tr><td>39</td><td><code>:invalid</code> な要素</td><td> </td><td><code>@aria-invalid</code> が <code>"true"</code>。</td></tr></tbody> <tbody> <tr><th colspan="4">インタラクティブ</th></tr> <tr><td>1</td><td><code>details</code></td><td><code>"group"</code></td><td><code>@aria-expanded</code> をサポートするロールでなければならない。</td></tr> <tr><td>2</td><td><code>summary</code></td><td><code>"heading"</code></td><td>変更不可。</td></tr> <tr><td>3</td><td><code>command</code></td><td> </td><td> </td></tr> <tr><td>4</td><td><code>menu</code>(<code>@type=<code>"context"</code></code> のもの)</td><td>なし</td><td>変更不可。</td></tr> <tr><td>5</td><td><code>menu</code>(<code>@type=<code>"toolbar"</code></code> のもの)</td><td><code>"toolbar"</code></td><td>変更不可。</td></tr> <tr><td>6</td><td><code>menu</code>(<code>@type</code> のないもの)</td><td><code>"menu"</code></td><td>変更不可。</td></tr> <tr><td>7</td><td><code>@type</code> のない <code>menu</code> の子孫で、Type 制約が <code>"checkbox"</code> のコマンド定義要素</td><td><code>"menuitemcheckbox"</code></td><td><code>@aria-checked</code> は当該コマンドの Checked 制約を反映。</td></tr> <tr><td>8</td><td><code>@type</code> のない <code>menu</code> の子孫で、Type 制約が <code>"command"</code> のコマンド定義要素</td><td><code>"menuitem"</code></td><td>変更不可。</td></tr> <tr><td>9</td><td><code>@type</code> のない <code>menu</code> の子孫で、Type 制約が <code>"radio"</code> のコマンド定義要素</td><td><code>"menuitemradio"</code></td><td><code>@aria-checked</code> は当該コマンドの Checked 制約を反映。</td></tr></tbody></table> <script type="application/javascript; version=1.8"> (function () { // Asymmetrical JavaScript Abridgment Exclusively const isTD = (function (row) ('TD' === row.cells[this].nodeName)); const FirstTD = (function (ary, tbody) ary.concat (Array.map (tbody.rows, Object).filter (isTD, 0))) const Hide = (function (row) row.setAttribute('aria-hidden', String (this))); const isHide = (function (row) ! (String (this) === row.getAttribute ('aria-hidden'))); const isView = (function (row) ('false' === row.getAttribute ('aria-hidden'))); const Tbody = (function (no) let (tBodies = this.tBodies) (('number' === typeof no) ? [tBodies [no] ] : Array.map (tBodies, Object))); const RowText = (function (cellIndex) ('undefined' === typeof cellIndex) ? (function (row) row.textContent) : (function (row) row.cells[cellIndex].textContent)); //____________ const Reset = (function (no) Tbody.call (this.table, no) .reduce (FirstTD, []) .filter (isHide, true) .forEach (Hide, false)); const Reverse = (function (inversion) (function (no) Tbody.call (this.table, no) .reduce (FirstTD, []) .forEach (inversion))) (function (row) Hide.call (! isHide.call (false, row), row)); const Limit = (function (splice) (function (s, e, no) Tbody.call (this.table, no) .reduce (splice (s, e), []) // reduce が callback で渡せないのでクロージャーにして .forEach (Hide, true))) (function (s, e) (function (ary, tbody) let (target = Array.map (tbody.rows, Object).filter (isHide, false)) ary.concat (target.splice (s, e || target.length -s)))); const find = (function (remove) (function (search_reg, cellIndex, no) Tbody.call (this.table, no) .reduce (FirstTD, []) .filter (isHide, false) // これは下と一緒に処理できる .filter (remove, { reg: search_reg, text: RowText (cellIndex) }) .forEach (Hide, true))) (function (row) (! this.reg.test (this.text (row)))); var sort = (function (tbodySort) (function (conditionString, no) Tbody.call (this.table, no) .forEach (tbodySort, { condition: conditionString || '0'}))) ((function (createCompare, move) (function (tbody) let (cloneTbody = tbody.cloneNode (false)) (Array.map (tbody.rows, Object) .sort (createCompare (this.condition.split (/[\s,]+/g))) .forEach (move, cloneTbody), tbody.parentNode.replaceChild (cloneTbody, tbody)))) ((function (cond) (function (a, b) { var result = 0; var cnt = 0; var cellIndex; var comFlag; var tmp; var _a; var _b; if (isTD.call (0, a) * isTD.call (0, b)) while (cmp = cond[cnt++]) { tmp = cmp.match (/^([\-\+]{0,1})([0-9]+)$/); // "-0" を扱えるよう文字列処理 if (null === tmp) throw new Error (); cmpFlag = ('-' === tmp[1]) ? 1: -1; // "-"= 降、"+" or "" = 昇 cellIndex = parseInt (tmp[2], 10); _a = a.cells[cellIndex].textContent; _b = b.cells[cellIndex].textContent; _a = isNaN (_a) ? _a: parseFloat (_a); _b = isNaN (_b) ? _b: parseFloat (_b); result = ((_a < _b) - (_a > _b)) * cmpFlag; if (result) break; } return result; }) ), (function (row) this.appendChild (row)))); //____________ var TableViewer = function (node) { // オブジェクト this.table = node; }; TableViewer.prototype.reset = function (tbody) { Reset.apply (this, arguments); return this; }; TableViewer.prototype.limit = function (start, end, tbody) { Limit.apply (this, arguments); return this; }; TableViewer.prototype.reverse = function (tbody) { Reverse.apply (this, arguments); return this; }; TableViewer.prototype.find = function (reg, cellIndex, tbody) { find.apply (this, arguments); return this; }; TableViewer.prototype.sort = function (cmp, cellIndex, tbody) { sort.apply (this, arguments); return this; }; //____________ this.createTableViewer = (function (table) (table instanceof HTMLTableElement) ? new TableViewer (table) : null); })(); var table = createTableViewer (document.getElementById ('HOGE')); table.reset().sort('-1,+3'); </script>
事務所のブレーカーが落ちる
さすがに、GTX460 × 6枚稼動はきつかったらしい。
それにしても、これからどんどん寒くなるだろうに、ここは暖かい。
2次元配列を1次元にするには
var ary = [ [0,1,2], [3,4], [5,6,7,8,9] ]; // 以下のようにしたい。 // [0,1,2,3,4,5,6,7,8,9] //基本 var result = [ ]; for (var i = 0, I = ary.length; i < I; i++) { for (var j = 0, J = ary[i].length; j < J; j++) { result.push (ary[i][j]); } } alert (result);
その2
var result = [ ]; for (var i = 0, I = ary.length; i < I; i++) { result = result.concat (ary[i]); } alert (result);
その3
for (var result = []; ary.length;) result = result.concat (ary.shift()); alert (result);
その4(再帰)
function change (a, b) a.length ? let (c = a.shift ()) arguments.callee (a, (b || []).concat (c)) : b; alert(change (ary));
その4のa
function change (a, b) a.length ? arguments.callee (a, (b || []).concat (a.shift ())): b; alert(change (ary));
その5
var result = ary.reduce (function (a, b) a.concat (b), []); alert (result);