我有以下HTML(不是我自己的HTML,我正在抓取)。
逻辑是,每个包含 strong 元素的元素都是一个类别。 属于该类别的产品是所有接下来的带有某些文本的tr-elements。只要没有tr包含另一个强元素,就可以采用“下一个”项,因为这将是一个新类别。
var offers$ = $('#MInhalt td'),
offers = {};
offers$.each((ignore, el) => {
var this$ = $(el),
isCategory = !!this$.find('strong').length,
thisCategoryName = this$.text().replace(/[^a-zA-Z\d]/g, '_'), // to make sure no special chars
categoryItems$ = this$.nextUntil('<strong>').filter(function(itm$) {return itm$.find('')});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="MInhalt" class="linie">
<table width="100%">
<tbody>
<tr>
<td><strong>Drinks</strong></td>
<td> </td>
</tr>
<tr>
<td>Eistee mit Minze, Zitrone und Ingwer 0,2l</td>
<td>2,00</td>
</tr>
<tr>
<td>Frisch entsafteter Möhren-Apfel-Ingwersaft mit Traubenkernöl 0,2l</td>
<td>2,50</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td><strong>Suppen</strong></td>
<td> </td>
</tr>
<tr>
<td>Kürbis-Ingwersuppe mit Croutons</td>
<td>4,20</td>
</tr>
<tr>
<td>Gemüseeintopf mit Rindfleisch</td>
<td>4,20</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td><strong>Salate</strong></td>
<td> </td>
</tr>
<tr>
<td>Gemischter Salat (klein/mittel/groß)</td>
<td>2,50/3,80/5,90</td>
</tr>
<tr>
<td>Großer Salat mit gebr. Putenbruststreifen, Champignons und kleinen Kartoffeln in Chili-Sahnesauce (mit Balsamico-Kirschdressing)</td>
<td>8,50</td>
</tr>
</tbody>
</table>
</div>
{
"Drinks": [{
"name": "Eistee mit Minze, Zitrone und Ingwer 0,2l",
"price": "2,00"
},
{
"name": "Frisch entsafteter Möhren-Apfel-Ingwersaft mit Traubenkernöl 0,2l",
"price": "2,50"
}
],
"Suppen": [{
"name": "Kürbis-Ingwersuppe mit Croutons",
"price": "4,20"
},
{
"name": "Gemüseeintopf mit Rindfleisch",
"price": "4,20"
}
],
"Salate": [{
"name": "Gemischter Salat (klein/mittel/groß)",
"price": "2,50/3,80/5,90"
},
{
"name": "Großer Salat mit gebr. Putenbruststreifen, Champignons und kleinen Kartoffeln in Chili-Sahnesauce (mit Balsamico-Kirschdressing)",
"price": "8,50"
}
]
}
我的方法是以某种方式使用jQuery.nextUntil(),但是我不知道如何正确地做到这一点,这就是:
offers$ = $('#MInhalt strong');
offers$.each((ignore, el) => {
const thisCategoryName = el.replace(/[^a-zA-Z\d]/g, '_'),
categoryItems =
});
有人可以在这里帮忙吗?