subid не является атрибутом для хранения данных в нем, поэтому вы не можете добавить такой атрибут в html-тег и заполнить его значением (Конечно, запись строки в него будет работать, но это то, что вы необходимость?). Но вы можете добавить наборы данных, если вы используете html5. Поэтому используйте это решение для хранения вашего значения строк в свойстве набора данных subid.
Если строка является объектом и вы хотите увидеть строковое значение объекта, используйте JSON.stringify перед сохранением его в наборе данных
row.forEach(function(row) {
var subchapname = document.createElement("div");
subchapname.setAttribute("id", "subchaptertitle");
subchapname.dataset.subid = row;
// subchapname.dataset.subid = JSON.stringify(row);
subchapname.setAttribute("onclick","{ alert('You are not going to believe this!') } ");
subchapname.textContent = row.subname;
rows.appendChild(subchapname);
});
Ваш элемент теперь должен выглядеть так:
<div id="subchaptertitle" onclick="{ alert('You are not going to believe this!') } " data-subid="[object Object]"></div>
Или, если вы использовали JSON.stringify:
<div id="subchaptertitle" onclick="{ alert('You are not going to believe this!') } " data-subid="what ever row is as a string"></div>
Чтобы записать значение в консоль, (после добавления тега в DOM) сделайте что-то вроде этого:
console.log(document.getElementById('subchaptertitle').dataset.subid);
Если вы использовали JSON.stringify, теперь используйте что-то вроде этого:
console.log(JSON.parse(document.getElementById('subchaptertitle').dataset.subid));