见http://jsfiddle.net/TULKC/
var el=document.getElementById('article'),
text=getText(el);
function getText(el){
var els=el.childNodes,
t='';
for(var i=0;i<els.length;i++){
if(els[i].nodeType==3){//If it's a text node
if(!/^\s+$/.test(els[i].nodeValue)){//We avoid spaces
t+=els[i].nodeValue;
}
}else if(els[i].nodeType==1){//If it's an element node
var nName=els[i].nodeName.toLowerCase(),
c=check(nName);
if(c==1){//Allowed elements
t+='<'+nName+'>'+getText(els[i])+'</'+nName+'>';
}else if(c==2){//Allowed self-closing elements
t+='<'+nName+' />';
}
}
}
return t;
}
function check(nodeName){
switch(nodeName){
case 'b': return 1;//Allowed elements
case 'br':return 2;//Allowed self-closing elements
default:return 0;
}
}
alert(text);
注意:您可以通过这种方式添加更多例外:
switch(nodeName){
case 'b': case 'a': return 1;//Allowed elements
case 'br':case 'img':return 2;//Allowed self-closing elements
default:return 0;
}
(好吧,如果你使用 HTML5,img
则不是自闭合元素)
编辑:
如果要保留属性,可以使用以下函数
function getAttr(el){
var attr=el.attributes,
t='';
for(var i=0;i<attr.length;i++){
t+=' '+attr[i].nodeName+'="'+attr[i].nodeValue+'"';
}
return t;
}
进而
if(c==1){
t+='<'+nName+getAttr(els[i])+'>'+getText(els[i])+'</'+nName+'>';
}else if(c==2){
t+='<'+nName+getAttr(els[i])+' />';
}
在这里看到它:http: //jsfiddle.net/TULKC/4/