Я подозреваю, что здесь ...
content.substring(
content.indexOf(tar, prev) + tarlen,
content.indexOf("</li>", content.indexOf(tar, prev))));
Вы обнаружите свою проблему "один на один" ... точнее,
content.indexOf("</li>", content.indexOf(tar, prev))
... as content.indexOf(tar, prev)
возвращает индекс (который будет в диапазоне от 0 до n-1), и вы пытаетесь использовать его как длину (которая должна находиться в диапазоне от 1 до n).
Звук примерно так?
Попробуйте добавить туда "+1" ...
content.indexOf("</li>", content.indexOf(tar, prev)+1)
Кроме того, ваша техника не будет работать для всех документов HTML. Вы должны либо использовать правильную библиотеку / инструмент для разбора HTML, либо фактически анализировать HTML, элемент за элементом.