Как получить текст у тега?
У меня есть данный код.
const el = document.getElementById("wrap-text");
console.log(el.textContent)
<!DOCTYPE html>
<html>
<head>
<title>Document</title>
</head>
<body>
<div id="wrap-text">
Some text
<span>Some text 2</span>
</div>
</body>
</html>
И в консоли выводиться данное сообщение:
Some text Some text 2
Но "Some text 2" не является текстом div элемента.
Также происходит и с innerText.
Как тогда получить текст внутри элементов без текстов других тегов?
Заранее спасибо за ответ.
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Отдельной функции нет. Можно только пройтись по дочерним узлам и получить текст только текстовых узлов.
Для проверки, что узел текстовый можно проверить nodeType
на значение Node.TEXT_NODE
const el = document.getElementById("wrap-text");
function onlyText(el) {
var res = '';
for (var i = 0; i < el.childNodes.length; i++) {
var childNode = el.childNodes[i];
if (childNode.nodeType == Node.TEXT_NODE) {
res += childNode.textContent;
}
}
return res;
}
console.log(onlyText(el))
<div id="wrap-text">
Some text
<span>Some text 2</span>
</div>
Пример с итераторами:
var onlyText = document.getElementById("wrap-text")
.childNodes
.values()
.filter(n => n.nodeType == Node.TEXT_NODE)
.map(n => n.textContent)
.toArray()
.join('');
console.log(onlyText)
<div id="wrap-text">
Some text
<span>Some text 2</span>
</div>