Отфильтруйте childNodes
, чтобы включить только текстовые узлы, и используйте textContent
каждого из соответствующих узлов:
const text = Array.prototype.filter
.call(element.childNodes, (child) => child.nodeType === Node.TEXT_NODE)
.map((child) => child.textContent)
.join('');
text
включает полную разметку текста, включая переводы строки. Если это нежелательно, используйте text.trim()
.
. filter.call
используется, потому что childNodes
- это NodeList
, который похож на массив, но не поддерживает метод .filter
.
Чтобы получить текст только для первого узла
const text = Array.prototype.filter
.call(element.childNodes, (child) => child.nodeType === Node.TEXT_NODE)[0];
В качестве альтернативы, если вы можете полагаться на тот факт, что значение всегда является первым дочерним элементом, вышеприведенное можно упростить до
const text = element.childNodes[0];