В целом, вы всё правильно думаете.
Выполняете запрос к серверу за обновлённой страницей.
fetch( location.href )
.then(r => r.text())
.then(html => {
// html -- HTML код текущей страницы. Так если бы мы просто обновили страницу.
})
Далее, из обновлённого кода нужно достать кусочек с новостями. Простейший способ построить DOM:
const template = document.createElement('template')
template.innerHTML = html
const selector = '.posts-container' // Селектор элемента который нужно обновить
document
.querySelector(selector)
.replaceWith(
template.content.querySelector(selector)
)