Javascript 从DOM保留换行符中提取未格式化文本的最佳方法?
假设我在HTML中有以下元素Javascript 从DOM保留换行符中提取未格式化文本的最佳方法?,javascript,dom,Javascript,Dom,假设我在HTML中有以下元素TEXT: <div id="TEXT"> <p>First <strong>Line</strong></p> <p>Seond <em>Line</em></p> </div> 第一行 第一线 如何从这个元素中提取原始文本,没有HTML标记,但保留换行符 我知道以下两种选择,但它们似乎都不完美: document.getEleme
TEXT
:
<div id="TEXT">
<p>First <strong>Line</strong></p>
<p>Seond <em>Line</em></p>
</div>
第一行
第一线
如何从这个元素中提取原始文本,没有HTML标记,但保留换行符
我知道以下两种选择,但它们似乎都不完美:
document.getElementById(“TEXT”).textContent
- 返回
第一行第二行
- 问题:忽略段落之间应包含的换行符
document.getElementById(“文本”).innerText
- 返回
第一行 第二行
- 问题:不是W3C标准的一部分,也不能保证在所有浏览器中都能工作
这是一个方便的函数,用于获取任何元素的文本内容,它在所有平台上都能很好地工作,并且可以保留换行符
function text(e){
var t = "";
e = e.childNodes || e;
for(var i = 0;i<e.length;i++){
t+= e[i].nodeType !=1 ? e[i].nodeValue : text(e[i].childNodes);
}
return t;
}
函数文本(e){
var t=“”;
e=e.childNodes | | e;
对于(var i=0;i,您可以检查jQuery是如何实现的。它使用了。下面是您可以使用的函数
<div id="TEXT">
<p>First <strong>Line</strong></p>
<p>Seond <em>Line</em></p>
</div>
<script>
var getText = function( elem ) {
var node,
ret = "",
i = 0,
nodeType = elem.nodeType;
if ( !nodeType ) {
// If no nodeType, this is expected to be an array
while ( (node = elem[i++]) ) {
// Do not traverse comment nodes
ret += getText( node );
}
} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
// Use textContent for elements
// innerText usage removed for consistency of new lines (jQuery #11153)
if ( typeof elem.textContent === "string" ) {
return elem.textContent;
} else {
// Traverse its children
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
ret += getText( elem );
}
}
} else if ( nodeType === 3 || nodeType === 4 ) {
return elem.nodeValue;
}
// Do not include comment or processing instruction nodes
return ret;
};
console.log(getText(document.getElementById('TEXT')));
<script>
第一行
第一线
var getText=函数(elem){
变量节点,
ret=“”,
i=0,
nodeType=elem.nodeType;
if(!nodeType){
//如果没有节点类型,则应为数组
while((node=elem[i++])){
//不要遍历注释节点
ret+=getText(节点);
}
}else if(节点类型===1 | |节点类型===9 | |节点类型===11){
//对元素使用文本内容
//为了新行的一致性,删除了innerText用法(jQuery#11153)
if(元素的类型。文本内容==“字符串”){
返回elem.textContent;
}否则{
//遍历其子对象
for(elem=elem.firstChild;elem;elem=elem.nextSibling){
ret+=getText(elem);
}
}
}else if(节点类型===3 | |节点类型===4){
返回elem.nodeValue;
}
//不包括注释或处理指令节点
返回ret;
};
log(getText(document.getElementById('TEXT'));
比textContent有更多的支持,IE8不能满足这一点——还有这个:还有这个