HTML
<div class = "price"><strike>AAA</strike>BBB</div>
Мой вопрос в том, есть ли способ получить только текст «BBB», используя JS. Обратите внимание, что у меня нет доступа к HTML-коду.
Мне нужно получить оба текста (AAA и BBB) по отдельности.
Например document.querySelector('.price strike').innerText
который возвращает "AAA"
Для второй части я использую document.querySelector('.price').innerText
, который возвращает «AAABBB». Это проблема. Есть ли способ выбрать непосредственно "BBB"?
почему бы вам не обернуть BBB в тег span, а затем выбрать его ??
вам нужно перебрать только текстовые узлы в интересующем вас элементе
в вашем конкретном случае «BBB» является последним дочерним элементом «.price», поэтому вы можете получить его значение так же просто, как:
const text = document.querySelector('.price').lastChild.nodeValue;
document.querySelector('#result').innerHTML = text;
<div class = "price"><strike>AAA</strike>BBB</div>
<div id = "result"></div>
Я не уверен, есть ли какой-либо способ получить этот текст «без забастовки» напрямую, но вы можете добиться того, чего хотите, с помощью небольшого обходного пути. Например, игра с методами slice
и indexOf
:
const strikeText = document.querySelector('.price strike').innerText;
const allText = document.querySelector('.price').innerText;
const restText = allText.slice(allText.indexOf(strikeText) + strikeText.length)
console.info(strikeText)
console.info(restText)
<div class = "price"><strike>AAA</strike>BBB</div>
Перебрать дочерние узлы и добавить значения узлов из текстовых узлов.
function getNodeText(elem) {
var txt = "";
for (let i = 0; i < elem.childNodes.length; i++) {
if (elem.childNodes[i].nodeType === 3) { //text node
txt += elem.childNodes[i].nodeValue;
}
}
}
вероятно, сделайте подстроку, чтобы получить "BBB", из "AAABBB".substr('AAA'.length)