Получить чистый текст без HTML-элемента с помощью javascript?
У меня есть кнопка 1 и некоторый текст в моем HTML, например:
function get_content(){
// I don't know how to do in here!!!
}
<input type="button" onclick="get_content()" value="Get Content"/>
<p id='txt'>
<span class="A">I am</span>
<span class="B">working in </span>
<span class="C">ABC company.</span>
</p>
Когда пользователь нажимает кнопку, содержимое в <p id='txt'>
станет следующим ожидаемым результатом:
<p id='txt'>
// All the HTML element within the <p> will be disappear
I am working in ABC company.
</p>
Кто-нибудь может мне помочь, как написать функцию JavaScript? Спасибо.
Ответы
Ответ 1
[2017-07-25], так как это продолжает быть принятым ответом, несмотря на то, что это очень хакерское решение, я включаю в него Gabi код, оставив мой собственный, чтобы служить плохим примером.
<style>
.A {background: blue;}
.B {font-style: italic;}
.C {font-weight: bold;}
</style>
<script>
// my hacky approach:
function get_content() {
var html = document.getElementById("txt").innerHTML;
document.getElementById("txt").innerHTML = html.replace(/<[^>]*>/g, "");
}
// Gabi elegant approach, but eliminating one unnecessary line of code:
function gabi_content() {
var element = document.getElementById('txt');
element.innerHTML = element.innerText || element.textContent;
}
// and exploiting the fact that IDs pollute the window namespace:
function txt_content() {
txt.innerHTML = txt.innerText || txt.textContent;
}
</script>
<input type="button" onclick="get_content()" value="Get Content (bad)"/>
<input type="button" onclick="gabi_content()" value="Get Content (good)"/>
<input type="button" onclick="txt_content()" value="Get Content (shortest)"/>
<p id='txt'>
<span class="A">I am</span>
<span class="B">working in </span>
<span class="C">ABC company.</span>
</p>
Ответ 2
Вы можете использовать это:
var element = document.getElementById('txt');
var text = element.innerText || element.textContent;
element.innerHTML = text;
В зависимости от того, что вам нужно, вы можете использовать либо element.innerText
, либо element.textContent
. Они различаются по-разному. innerText
пытается приблизиться к тому, что произойдет, если вы выберете то, что видите (визуализировали html), и скопируйте его в буфер обмена, а textContent
сортирует только полосы html-тегов и дает вам то, что осталось.
innerText
также совместим со старыми браузерами IE (оттуда).
Ответ 3
Если вы можете использовать jquery, то его простой
$("#txt").text()
Ответ 4
Этот ответ будет работать, чтобы получить только текст для любого элемента HTML.
Этот первый параметр "node" - это элемент для получения текста. Второй параметр является необязательным, и если true добавит пробел между текстом внутри элементов, если там не было места.
function getTextFromNode(node, addSpaces) {
var i, result, text, child;
result = '';
for (i = 0; i < node.childNodes.length; i++) {
child = node.childNodes[i];
text = null;
if (child.nodeType === 1) {
text = getTextFromNode(child, addSpaces);
} else if (child.nodeType === 3) {
text = child.nodeValue;
}
if (text) {
if (addSpaces && /\S$/.test(result) && /^\S/.test(text)) text = ' ' + text;
result += text;
}
}
return result;
}
Ответ 5
В зависимости от того, что вам нужно, вы можете использовать либо element.innerText
, либо element.textContent
. Они различаются по-разному. innerText
пытается приблизиться к тому, что произойдет, если вы выберете то, что видите (визуализировали html), и скопируйте его в буфер обмена, а textContent
просто удаляет теги html и дает вам то, что осталось.
innerText
больше не используется для IE, и это поддерживается во всех основных браузерах. Конечно, в отличие от textContent
, он совместим со старыми браузерами IE (поскольку они придумали его).
Полный пример (из ответ Gabi):
var element = document.getElementById('txt');
var text = element.innerText || element.textContent; // or element.textContent || element.innerText
element.innerHTML = text;
Ответ 6
Это работает для меня скомпилировано на основе того, что было сказано здесь с более современным стандартом. Это работает лучше всего для нескольких взглядов.
let element = document.querySelectorAll('.myClass')
element.forEach(item => {
console.log(item.innerHTML = item.innerText || item.textContent)
})
Ответ 7
Это должно работать:
function get_content(){
var p = document.getElementById("txt");
var spans = p.getElementsByTagName("span");
var text = '';
for (var i = 0; i < spans.length; i++){
text += spans[i].innerHTML;
}
p.innerHTML = text;
}
Попробуйте эту скрипту: http://jsfiddle.net/7gnyc/2/
Ответ 8
function get_content(){
var returnInnerHTML = document.getElementById('A').innerHTML + document.getElementById('B').innerHTML + document.getElementById('A').innerHTML;
document.getElementById('txt').innerHTML = returnInnerHTML;
}
Это должно сделать это.
Ответ 9
Попробуйте (короткая версия Gabi ответьте на идею)
function get_content() {
txt.innerHTML = txt.textContent;
}
function get_content() {
txt.innerHTML = txt.textContent ;
}
span { background: #fbb}
<input type="button" onclick="get_content()" value="Get Content"/>
<p id='txt'>
<span class="A">I am</span>
<span class="B">working in </span>
<span class="C">ABC company.</span>
</p>