jQuery
Вам не нужно использовать this
, если вы используете названный параметр.В jQuery вторым аргументом .each()
является элемент в контексте (эквивалентный this ), поэтому вы бы $('tr').each(function(index, element){ ... })
$("tr").each(function(i, tr) {
$(tr)
.find(".windowbg>[id^=msg]")
.each(function(i, msg) {
const link = $(msg).find("a");
const subject: string = link.text();
const id = extractId(link.prop("href"));
threads.push(new Thread(id, subject));
});
});
ES6 +
Вы можете вообще отказаться от jQuery, используя ES6 и более поздние версии.Функции стрелок (и forEach
) помогают сократить синтаксис:
let rows = document.querySelectorAll('tr')
rows.forEach(row => {
let messages = row.querySelectorAll('.windowbg > [id^=msg]')
messages.forEach(message => {
const link = message.querySelector('a')
const subject = link.textContent
const id = link.href // extractId(link.href)
console.log(`id: ${id}`)
// threads.push(new Thread(id,subject)
})
})
table,
td {
border: 1px solid #999;
border-collapse: collapse
}
td {
padding: .75rem
}
table {
width: 75%;
margin: 0 auto;
}
<table>
<tbody>
<tr>
<td class="windowbg">
<span id="msg1"><a href="#link1">Link</a></span>
<span id="notmsg1"><a href="#foo2">Foo</a></span>
<div>Other Text</div>
</td>
<td>Other Cell</td>
</tr>
<tr>
<td class="windowbg">
<span id="msg2"><a href="#link2">Link</a></span>
<span id="notmsg2"><a href="#foo2">Foo</a></span>
<div>Other Text 2</div>
</td>
<td>Other Cell</td>
</tr>
</tbody>
</table>