我试图获取用户输入的html数据中的每个文本
我有html如下
<em>first part</em> of texts here
<table>
......
......
</table>
<em>second part</em> of texts
我用jquery
project =[];
$(htmlData).contents().each(function(){
if($(this).is('table')){
//do something with table
}else{
if(this.nodeType === 3) { // Will only select element nodes
project.push($(this).text());
}else if(this.nodeType === 1){
project.push(this.outerHTML);
}
}
}
数组最终结束了
array(0=>'<em>first part</em>', 2=>'of texts here',3=>'<em>second part</em>',4=>'of texts')
我希望得到如下的数组
array(0=>'<em>first part</em>of texts here',1=>'<em>second part</em>of texts');
我该如何做到这一点?谢谢您的帮助!
最佳答案 演示:
http://jsfiddle.net/Cbey9/2/
var project =[];
$('#htmlData').contents().each(function(){
if($(this).is('table')){
//do something with table
}else{
var txt = (
this.nodeType === 3 ? $(this).text() :
(this.nodeType === 1 ? this.outerHTML : '')
).replace(/\s+/g,' ') // Collapse whitespaces
.replace(/^\s/,'') // Remove whitespace at the beginning
.replace(/\s$/,''); // Remove whitespace at the end
if(txt !== ''){ // Ignore empty
project.push(txt);
}
}
});
我明白了你的问题.如果你想在表中拆分,那么你可以使用
var project =[''];
$('#htmlData').contents().each(function(){
if($(this).is('table')){
project.push('');
//do something with table
}else{
project[project.length-1] += (
this.nodeType === 3 ? $(this).text() :
(this.nodeType === 1 ? this.outerHTML : '')
);
}
});
for(var i=0; i<project.length; ++i){
project[i] = project[i].replace(/\s+/g,' ') // Collapse whitespaces
.replace(/^\s/,'') // Remove whitespace at the beginning
.replace(/\s$/,''); // Remove whitespace at the end
}