2013-07-16 49 views
1

我从CKEditor获取纯文本中的一堆html数据。它包含表结构和一堆html标记。如何从纯文本中提取html标记

我想知道是否有办法只提取表结构和TD数据。

的明文可能是像

first table....bunch more texts here... 

<table> 
    <tr><td> data1 </td></tr> 
    <tr><td> data2 </td></tr> 
    <tr><td> data3 </td></tr> 
</table> 

end of table. test data here... 

<table> 
    <tr><td> data4 </td></tr> 
    <tr><td> data5 </td></tr> 
    <tr><td> data6 </td></tr> 
</table> 

end of second table and bunch more texts.... 

我已经试过

//tableData contains everything the user type in CKEditor. 
var table = tableData.getElementsByTagName ('table'); 

但我只是意识到这些文本没有在dom。他们只是我从CKEditor提取的纯文本。

如何提取这些table数据?

感谢您的帮助!

+0

你可以显示你用来设置'tableData'的代码吗? – Jacob

+0

@jacob它真的只是我从CKEditor获得的纯文本。 var tableData = CKEDITOR.instances [id] .getData() – FlyingCat

回答

2

我假设你有一个tableData字符串,你想从中提取DOM节点来处理它们。

为避免解析,您可以将此字符串插入临时DOM元素。

var temp = document.createElement('div'); 
div.innerHTML = tableData; 

// Retrieve all tables. 
var tables = div.getElementsByTagName('table'); 
0

你需要像下面这样的东西,将所有表格拉入数组,然后遍历它们。这里是一个小提琴,它也展示了这个动作http://jsfiddle.net/M5nMY/。我在这里假设tabledata是包含表格的DOM元素的id。

var tableData = document.getElementById('tabledata'); 
var tables = tableData.getElementsByTagName('table'); 
var data = new Array(); 
for(var k = 0; k < tables.length; k++){ 
    var table = tables[k]; 
    for(var i=0; i< table.rows.length; i++){ 
     var row = table.rows[i].cells; 
     for(var j=0; j < row.length; j++){ 
     data.push(row[j].innerHTML); 
     } 
    } 
} 

请注意,在这种情况下,我已将所有表中的所有数据一次一行地推送到单个数组中。