RegExp в Javascript для группировки элементов по категориям - PullRequest
1 голос
/ 27 ноября 2010

Мне нужно реализовать RegExp в Javascript, который позволяет мне сопоставлять следующие категории и элементы, связывая элементы с их соответствующей категорией, но я не знаю как:

<table>
    <tbody>
        <tr>
            <td>
                <a href="mycategory1.asp">text</a>
            </td>
        </tr>
</tbody>
</table>
<div>
    <table>
        <tbody>
            <tr>
                </td>
                    <a href="myitem1.asp">text</a>
                <td>
            </tr>
            <tr>
                </td>
                    <a href="myitem2.asp">text</a>
                <td>
            </tr>
            <tr>
                </td>
                    <a href="myitem3.asp">text</a>
                <td>
            </tr>
            .....................
        </tbody>
    </table>
</div>
<table>
    <tbody>
        <tr>
            <td>
                <a href="mycategory2.asp">text</a>
            </td>
        </tr>
</tbody>
</table>

У меня может быть более 10 категорий, и я не знаю, сколько предметов будет в каждой категории. Я мог бы легко создать RegExp, который соответствует мне категориям и другой для элементов, но как я могу создать связь между ними?

Спасибо и всего наилучшего,

Ливио

Ответы [ 2 ]

1 голос
/ 27 ноября 2010

Не читайте HTML с помощью регулярных выражений.Дайте таблицам классы, а затем прочитайте их с помощью обхода DOM.HTML-код должен выглядеть следующим образом:

<table class="caption">
    <tbody>
        <tr>
            <td>
                <a href="mycategory1.asp">text</a>
            </td>
        </tr>
    </tbody>
</table>
<div>
    <table class="itemlist">
        <tbody>
            <tr>
                </td>
                    <a href="myitem1.asp">text</a>
                <td>
            </tr>
            <tr>
                </td>
                    <a href="myitem2.asp">text</a>
                <td>
            </tr>
            <tr>
                </td>
                    <a href="myitem3.asp">text</a>
                <td>
            </tr>
            .....................
        </tbody>
    </table>
</div>
<table class="caption">
    <tbody>
        <tr>
            <td>
                <a href="mycategory2.asp">text</a>
            </td>
        </tr>
    </tbody>
</table>
...

Затем составьте их список следующим образом:

var captions = document.getElementsByClassName("caption");
var itemlists = document.getElementsByClassName("itemlist");
var items = new Array();
for (var i=0; i<captions.length; i++) {
 var categoryLink = captions[i].getElementsByTagName("a")[0];
 var categoryItems = itemlists[i].getElementsByTagName("a");
 for (int j=0; j<categoryItems.length; j++) {
  items.push({"itemname":categoryItems[j].innerHTML,
              "itemurl":categoryItems[j].href,
              "categoryname":categoryLink.innerHTML,
              "categoryurl":categoryLink.href});
 }
}
0 голосов
/ 27 ноября 2010

Регулярные выражения - не серебряная пуля для всех проблем. RegEx создан для сопоставления текста с использованием шаблонов. ИМХО эту проблему лучше решить с помощью любого XML-парсера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...