我正在尝试获取用户输入的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
最终会像
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');
我如何做到这一点?谢谢你的帮助!
答案 0 :(得分:1)
DEMO :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
}
答案 1 :(得分:1)
将您想要的文本放在跨越某些特定类的范围内(不会改变布局):
<span class="phrase"><em>first part</em> of texts here</span>
<table>
......
......
</table>
<span class="phrase"><em>second part</em> of texts</span>
然后你可以得到它们:
$('span.phrase').each(function() {
project.push($(this).html());
});